Qt 中的窗口類

目錄

QWidget

設置父對象

窗口位置

測試代碼

窗口尺寸

窗口標題和圖標

信號

槽函數

QDialog

常用API

QDialog的子類

QMessageBox

QFileDialog

QFontDialog

QFontDialog類的靜態API

QColorDialog

顏色類 QColor

靜態API函數

測試代碼

QInputDialog

靜態函數

測試代碼

QProgressDialog

常用API

測試代碼

QMainWindow

菜單欄

工具欄

狀態欄

停靠窗口


QWidget

設置父對象

// 構造函數
QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());// 公共成員函數
// 給當前窗口設置父對象
void QWidget::setParent(QWidget *parent);
void QWidget::setParent(QWidget *parent, Qt::WindowFlags f);
// 獲取當前窗口的父對象, 沒有父對象返回 nullptr
QWidget *QWidget::parentWidget() const;

窗口位置

//------------- 窗口位置 -------------
// 得到相對于當前窗口父窗口的幾何信息, 邊框也被計算在內
QRect QWidget::frameGeometry() const;
// 得到相對于當前窗口父窗口的幾何信息, 不包括邊框
const QRect &geometry() const;
// 設置當前窗口的幾何信息(位置和尺寸信息), 不包括邊框
void setGeometry(int x, int y, int w, int h);
void setGeometry(const QRect &);// 移動窗口, 重新設置窗口的位置
void move(int x, int y);
void move(const QPoint &);

測試代碼

// 獲取當前窗口的位置信息
void MainWindow::on_positionBtn_clicked()
{QRect rect = this->frameGeometry();qDebug() << "左上角: " << rect.topLeft()<< "右上角: " << rect.topRight()<< "左下角: " << rect.bottomLeft()<< "右下角: " << rect.bottomRight()<< "寬度: " << rect.width()<< "高度: " << rect.height();
}// 重新設置當前窗口的位置以及寬度, 高度
void MainWindow::on_geometryBtn_clicked()
{int x = 100 + rand() % 500;int y = 100 + rand() % 500;int width = this->width() + 10;int height = this->height() + 10;setGeometry(x, y, width, height);
}// 通過 move() 方法移動窗口
void MainWindow::on_moveBtn_clicked()
{QRect rect = this->frameGeometry();move(rect.topLeft() + QPoint(10, 20));
}

窗口尺寸

//------------- 窗口尺寸 -------------
// 獲取當前窗口的尺寸信息
QSize size() const
// 重新設置窗口的尺寸信息
void resize(int w, int h);
void resize(const QSize &);
// 獲取當前窗口的最大尺寸信息
QSize maximumSize() const;
// 獲取當前窗口的最小尺寸信息
QSize minimumSize() const;
// 設置當前窗口固定的尺寸信息
void QWidget::setFixedSize(const QSize &s);
void QWidget::setFixedSize(int w, int h);
// 設置當前窗口的最大尺寸信息
void setMaximumSize(const QSize &);
void setMaximumSize(int maxw, int maxh);
// 設置當前窗口的最小尺寸信息
void setMinimumSize(const QSize &);
void setMinimumSize(int minw, int minh);// 獲取當前窗口的高度    
int height() const;
// 獲取當前窗口的最小高度
int minimumHeight() const;
// 獲取當前窗口的最大高度
int maximumHeight() const;
// 給窗口設置固定的高度
void QWidget::setFixedHeight(int h);
// 給窗口設置最大高度
void setMaximumHeight(int maxh);
// 給窗口設置最小高度
void setMinimumHeight(int minh);// 獲取當前窗口的寬度
int width() const;
// 獲取當前窗口的最小寬度
int minimumWidth() const;
// 獲取當前窗口的最大寬度
int maximumWidth() const;
// 給窗口設置固定寬度
void QWidget::setFixedWidth(int w);
// 給窗口設置最大寬度
void setMaximumWidth(int maxw);

窗口標題和圖標

//------------- 窗口圖標 -------------
// 得到當前窗口的圖標
QIcon windowIcon() const;
// 構造圖標對象, 參數為圖片的路徑
QIcon::QIcon(const QString &fileName);
// 設置當前窗口的圖標
void setWindowIcon(const QIcon &icon);//------------- 窗口標題 -------------
// 得到當前窗口的標題
QString windowTitle() const;
// 設置當前窗口的標題
void setWindowTitle(const QString &);

信號

// QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy policy);
// 窗口的右鍵菜單策略 contextMenuPolicy() 參數設置為 Qt::CustomContextMenu, 按下鼠標右鍵發射該信號
[signal] void QWidget::customContextMenuRequested(const QPoint &pos);
// 窗口圖標發生變化, 發射此信號
[signal] void QWidget::windowIconChanged(const QIcon &icon);
// 窗口標題發生變化, 發射此信號
[signal] void QWidget::windowTitleChanged(const QString &title);

槽函數

//------------- 窗口顯示 -------------
// 關閉當前窗口
[slot] bool QWidget::close();
// 隱藏當前窗口
[slot] void QWidget::hide();
// 顯示當前創建以及其子窗口
[slot] void QWidget::show();
// 全屏顯示當前窗口, 只對windows有效
[slot] void QWidget::showFullScreen();
// 窗口最大化顯示, 只對windows有效
[slot] void QWidget::showMaximized();
// 窗口最小化顯示, 只對windows有效
[slot] void QWidget::showMinimized();
// 將窗口回復為最大化/最小化之前的狀態, 只對windows有效
[slot] void QWidget::showNormal();//------------- 窗口狀態 -------------
// 判斷窗口是否可用
bool QWidget::isEnabled() const; // 非槽函數
// 設置窗口是否可用, 不可用窗口無法接收和處理窗口事件
// 參數true->可用, false->不可用
[slot] void QWidget::setEnabled(bool);
// 設置窗口是否可用, 不可用窗口無法接收和處理窗口事件
// 參數true->不可用, false->可用
[slot] void QWidget::setDisabled(bool disable);
// 設置窗口是否可見, 參數為true->可見, false->不可見
[slot] virtual void QWidget::setVisible(bool visible);

QDialog

常用API

// 構造函數
QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());// 模態顯示窗口
[virtual slot] int QDialog::exec();
// 隱藏模態窗口, 并且解除模態窗口的阻塞, 將 exec() 的返回值設置為 QDialog::Accepted
[virtual slot] void QDialog::accept();
// 隱藏模態窗口, 并且解除模態窗口的阻塞, 將 exec() 的返回值設置為 QDialog::Rejected
[virtual slot] void QDialog::reject();
// 關閉對話框并將其結果代碼設置為r。finished()信號將發出r;
// 如果r是QDialog::Accepted 或 QDialog::Rejected,則還將分別發出accept()或Rejected()信號。
[virtual slot] void QDialog::done(int r);[signal] void QDialog::accepted();
[signal] void QDialog::rejected();
[signal] void QDialog::finished(int result);

關于對話框窗口類的操作

// 對話框窗口中三個普通按鈕按下之后對應的槽函數
void MyDialog::on_acceptBtn_clicked()
{this->accept();  // exec()函數返回值為QDialog::Accepted
}void MyDialog::on_rejectBtn_clicked()
{this->reject();  // exec()函數返回值為QDialog::Rejected
}void MyDialog::on_donBtn_clicked()
{// exec()函數返回值為 done() 的參數, 并根據參數發射出對應的信號this->done(666);   
}

根據用戶針對對話框窗口的按鈕操作, 進行相應的邏輯處理

// 創建對話框對象
MyDialog dlg;    
int ret = dlg.exec();
if(ret == QDialog::Accepted)
{qDebug() << "accept button clicked...";// 顯示主窗口MainWindow* w = new MainWindow;w->show();
}
else if(ret == QDialog::Rejected)
{qDebug() << "reject button clicked...";// 不顯示主窗口............
}
else
{// ret == 666qDebug() << "done button clicked...";// 根據需求進行邏輯處理............
}

QDialog的子類

QMessageBox

QMessageBox 對話框類是 QDialog 類的子類, 通過這個類可以顯示一些簡單的提示框, 用于展示警告、錯誤、問題等信息。關于這個類我們只需要掌握一些靜態方法的使用就可以了。

QFileDialog

QFileDialog 對話框類是 QDialog 類的子類, 通過這個類可以選擇要打開/保存的文件或者目錄。關于這個類我們只需要掌握一些靜態方法的使用就可以了。

  - parent: 當前對話框窗口的父對象也就是父窗口- caption: 當前對話框窗口的標題- dir: 當前對話框窗口打開的默認目錄- options: 當前對話框窗口的一些可選項,枚舉類型, 一般不需要進行設置, 使用默認值即可- filter: 過濾器, 在對話框中只顯示滿足條件的文件, 可以指定多個過濾器, 使用 ;; 分隔- 樣式舉例: - Images (*.png *.jpg)- Images (*.png *.jpg);;Text files (*.txt)- selectedFilter: 如果指定了多個過濾器, 通過該參數指定默認使用哪一個, 不指定默認使用第一個過濾器

打開一個已存在的本地目錄

void MainWindow::on_filedlg_clicked()
{QString dirName = QFileDialog::getExistingDirectory(this, "打開目錄", "e:\\temp");QMessageBox::information(this, "打開目錄", "您選擇的目錄是: " + dirName);
}

打開一個本地文件

void MainWindow::on_filedlg_clicked()
{QString arg("Text files (*.txt)");QString fileName = QFileDialog::getOpenFileName(this, "Open File", "e:\\temp","Images (*.png *.jpg);;Text files (*.txt)", &arg);QMessageBox::information(this, "打開文件", "您選擇的文件是: " + fileName);
}

打開多個本地文件

void MainWindow::on_filedlg_clicked()
{QStringList fileNames = QFileDialog::getOpenFileNames(this, "Open File", "e:\\temp","Images (*.png *.jpg);;Text files (*.txt)");QString names;for(int i=0; i<fileNames.size(); ++i){names += fileNames.at(i) + " ";}QMessageBox::information(this, "打開文件(s)", "您選擇的文件是: " + names);
}

打開保存文件對話框

void MainWindow::on_filedlg_clicked()
{QString fileName = QFileDialog::getSaveFileName(this, "保存文件", "e:\\temp");QMessageBox::information(this, "保存文件", "您指定的保存數據的文件是: " + fileName);
}

QFontDialog

QFontDialog類是QDialog的子類, 通過這個類我們可以得到一個進行字體屬性設置的對話框窗口, 和前邊介紹的對話框類一樣, 我們只需要調用這個類的靜態成員函數就可以得到想要的窗口了。

// 構造函數QFont::QFont();/*參數:- family: 本地字庫中的字體名, 通過 office 等文件軟件可以查看- pointSize: 字體的字號- weight: 字體的粗細, 有效范圍為 0 ~ 99- italic: 字體是否傾斜顯示, 默認不傾斜*/QFont::QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false);// 設置字體void QFont::setFamily(const QString &family);// 根據字號設置字體大小void QFont::setPointSize(int pointSize);// 根據像素設置字體大小void QFont::setPixelSize(int pixelSize);// 設置字體的粗細程度, 有效范圍: 0 ~ 99void QFont::setWeight(int weight);// 設置字體是否加粗顯示void QFont::setBold(bool enable);// 設置字體是否要傾斜顯示void QFont::setItalic(bool enable);// 獲取字體相關屬性(一般規律: 去掉設置函數的 set 就是獲取相關屬性對應的函數名)QString QFont::family() const;bool QFont::italic() const;int QFont::pixelSize() const;int QFont::pointSize() const;bool QFont::bold() const;int QFont::weight() const;

如果一個QFont對象被創建, 并且進行了初始化, 我們可以將這個屬性設置給某個窗口, 或者設置給當前應用程序對象。

// QWidget 類
// 得到當前窗口使用的字體
const QWidget::QFont& font() const;
// 給當前窗口設置字體, 只對當前窗口類生效
void QWidget::setFont(const QFont &);// QApplication 類
// 得到當前應用程序對象使用的字體
[static] QFont QApplication::font();
// 給當前應用程序對象設置字體, 作用于當前應用程序的所有窗口
[static] void QApplication::setFont(const QFont &font, const char *className = nullptr);
QFontDialog類的靜態API
/*
參數:- ok: 傳出參數, 用于判斷是否獲得了有效字體信息, 指定一個布爾類型變量地址- initial: 字體對話框中默認選中并顯示該字體信息, 用于對話框的初始化- parent: 字體對話框窗口的父對象- title: 字體對話框的窗口標題- options: 字體對話框選項, 使用默認屬性即可, 一般不設置
*/[static] QFont QFontDialog::getFont(bool *ok, const QFont &initial, QWidget *parent = nullptr, const QString &title = QString(), QFontDialog::FontDialogOptions options = FontDialogOptions());[static] QFont QFontDialog::getFont(bool *ok, QWidget *parent = nullptr);

通過字體對話框選擇字體, 并將選擇的字體設置給當前窗口

void MainWindow::on_fontdlg_clicked()
{
#if 1// 方式1bool ok;QFont ft = QFontDialog::getFont(&ok, QFont("微軟雅黑", 12, QFont::Bold), this, "選擇字體");qDebug() << "ok value is: " << ok;
#else// 方式2QFont ft = QFontDialog::getFont(NULL);
#endif// 將選擇的字體設置給當前窗口對象this->setFont(ft);
}

QColorDialog

QColorDialog類是QDialog的子類, 通過這個類我們可以得到一個選擇顏色的對話框窗口, 和前邊介紹的對話框類一樣, 我們只需要調用這個類的靜態成員函數就可以得到想要的窗口了。

顏色類 QColor

關于顏色的屬性信息, 在QT框架中被封裝到了一個叫QColor的類中, 下邊為大家介紹一下這個類的API, 了解一下關于這個類的使用。
各種顏色都是基于,?,?這三種顏色調配而成的, 并且顏色還可以進行透明度設置, 默認是不透明的。

// 構造函數
QColor::QColor(Qt::GlobalColor color);
QColor::QColor(int r, int g, int b, int a = ...);
QColor::QColor();// 參數設置 red, green, blue, alpha, 取值范圍都是 0-255
void QColor::setRed(int red);		// 紅色
void QColor::setGreen(int green);	// 綠色
void QColor::setBlue(int blue);	// 藍色
void QColor::setAlpha(int alpha);	// 透明度, 默認不透明(255)
void QColor::setRgb(int r, int g, int b, int a = 255);int QColor::red() const;
int QColor::green() const;
int QColor::blue() const;
int QColor::alpha() const;
void QColor::getRgb(int *r, int *g, int *b, int *a = nullptr) const;
靜態API函數
  // 彈出顏色選擇對話框, 并返回選中的顏色信息
/*
參數:- initial: 對話框中默認選中的顏色, 用于窗口初始化- parent: 給對話框窗口指定父對象- title: 對話框窗口的標題- options: 顏色對話框窗口選項, 使用默認屬性即可, 一般不需要設置
*/[static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions());
測試代碼

QInputDialog

QInputDialog類是QDialog的子類, 通過這個類我們可以得到一個輸入對話框窗口, 根據實際需求我們可以在這個輸入窗口中輸入整形,?浮點型,?字符串類型的數據, 并且還可以顯示下拉菜單供使用者選擇。
和前邊介紹的對話框類一樣, 我們只需要調用這個類的靜態成員函數就可以得到想要的窗口了。

靜態函數
// 得到一個可以輸入浮點數的對話框窗口, 返回對話框窗口中輸入的浮點數
/*
參數:- parent: 對話框窗口的父窗口- title: 對話框窗口顯示的標題信息- label: 對話框窗口中顯示的文本信息(用于描述對話框的功能)- value: 對話框窗口中顯示的浮點值, 默認為 0- min: 對話框窗口支持顯示的最小數值- max: 對話框窗口支持顯示的最大數值- decimals: 浮點數的精度, 默認保留小數點以后1位- ok: 傳出參數, 用于判斷是否得到了有效數據, 一般不會使用該參數- flags: 對話框窗口的窗口屬性, 使用默認值即可
*/
[static] double QInputDialog::getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());// 得到一個可以輸入整形數的對話框窗口, 返回對話框窗口中輸入的整形數
/*
參數:- parent: 對話框窗口的父窗口- title: 對話框窗口顯示的標題信息- label: 對話框窗口中顯示的文本信息(用于描述對話框的功能)- value: 對話框窗口中顯示的整形值, 默認為 0- min: 對話框窗口支持顯示的最小數值- max: 對話框窗口支持顯示的最大數值- step: 步長, 通過對話框提供的按鈕調節數值每次增長/遞減的量- ok: 傳出參數, 用于判斷是否得到了有效數據, 一般不會使用該參數- flags: 對話框窗口的窗口屬性, 使用默認值即可
*/
[static] int QInputDialog::getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());// 得到一個帶下來菜單的對話框窗口, 返回選擇的菜單項上邊的文本信息
/*
參數:- parent: 對話框窗口的父窗口

測試代碼

帶下拉菜單的輸入框

void MainWindow::on_inputdlg_clicked()
{QStringList items;items << "蘋果" << "橙子" << "橘子" << "葡萄" << "香蕉" << "哈密瓜";QString item = QInputDialog::getItem(this, "請選擇你喜歡的水果", "你最喜歡的水果:", items, 1, false);QMessageBox::information(this, "水果", "您最喜歡的水果是: " + item);
}

多行字符串輸入框

void MainWindow::on_inputdlg_clicked()
{QString info = QInputDialog::getMultiLineText(this, "表白", "您最想對漂亮小姐姐說什么呢?", "呦吼吼...");QMessageBox::information(this, "知心姐姐", "您最想對小姐姐說: " + info);
}

單行字符串輸入框

void MainWindow::on_inputdlg_clicked()
{QString text = QInputDialog::getText(this, "密碼", "請輸入新的密碼", QLineEdit::Password, "helloworld");QMessageBox::information(this, "密碼", "您設置的密碼是: " + text);
}

QProgressDialog

QProgressDialog類是QDialog的子類, 通過這個類我們可以得到一個帶進度條的對話框窗口, 這種類型的對話框窗口一般常用于文件拷貝、數據傳輸等實時交互的場景中。

常用API
// 構造函數
/*
參數:- labelText: 對話框中顯示的提示信息- cancelButtonText: 取消按鈕上顯示的文本信息- minimum: 進度條最小值- maximum: 進度條最大值- parent: 當前窗口的父對象- f: 當前進度窗口的flag屬性, 使用默認屬性即可, 無需設置
*/
QProgressDialog::QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr,Qt::WindowFlags f = Qt::WindowFlags());// 設置取消按鈕顯示的文本信息
[slot] void QProgressDialog::setCancelButtonText(const QString &cancelButtonText);// 公共成員函數和槽函數
QString QProgressDialog::labelText() const;
void QProgressDialog::setLabelText(const QString &text);// 得到進度條最小值
int QProgressDialog::minimum() const;
// 設置進度條最小值
void QProgressDialog::setMinimum(int minimum);// 得到進度條最大值
int QProgressDialog::maximum() const;
// 設置進度條最大值
void QProgressDialog::setMaximum(int maximum);// 設置進度條范圍(最大和最小值)
[slot] void QProgressDialog::setRange(int minimum, int maximum);// 得到進度條當前的值
int QProgressDialog::value() const;
// 設置進度條當前的值
void QProgressDialog::setValue(int progress);
測試代碼
場景描述:1. 基于定時器模擬文件拷貝的場景2. 點擊窗口按鈕, 進度條窗口顯示, 同時啟動定時器3. 通過定時器信號, 按照固定頻率更新對話框窗口進度條4. 當進度條當前值 == 最大值, 關閉定時器, 關閉并析構進度對話框void MainWindow::on_progressdlg_clicked()
{// 1. 創建進度條對話框窗口對象QProgressDialog *progress = new QProgressDialog("正在拷貝數據...", "取消拷貝", 0, 100, this);// 2. 初始化并顯示進度條窗口progress->setWindowTitle("請稍后");progress->setWindowModality(Qt::WindowModal);progress->show();// 3. 更新進度條static int value = 0;QTimer *timer = new QTimer;connect(timer, &QTimer::timeout, this, [=](){progress->setValue(value);value++;// 當value > 最大值的時候if(value > progress->maximum()){timer->stop();value = 0;delete progress;delete timer;}});connect(progress, &QProgressDialog::canceled, this, [=](){timer->stop();value = 0;delete progress;delete timer;});timer->start(50);
}

QMainWindow

QMainWindow是標準基礎窗口中結構最復雜的窗口, 其組成如下:

  • 提供了菜單欄,?工具欄,?狀態欄,?停靠窗口
  • 菜單欄: 只能有一個, 位于窗口的最上方
  • 工具欄: 可以有多個, 默認提供了一個, 窗口的上下左右都可以停靠
  • 狀態欄: 只能有一個, 位于窗口最下方
  • 停靠窗口: 可以有多個, 默認沒有提供, 窗口的上下左右都可以停靠

菜單欄

關于頂級菜單可以直接在UI窗口中雙擊, 直接輸入文本信息即可, 對應子菜單項也可以通過先雙擊在輸入的方式完成添加, 但是這種方式不支持中文的輸入

常用的添加方式

一般情況下, 我們都是先在外面創建出QAction對象, 然后再將其拖拽到某個菜單下邊, 這樣子菜單項的添加就完成了。

通過代碼的方式添加菜單或者菜單項

// 給菜單欄添加菜單
QAction *QMenuBar::addMenu(QMenu *menu);
QMenu *QMenuBar::addMenu(const QString &title);
QMenu *QMenuBar::addMenu(const QIcon &icon, const QString &title);// 給菜單對象添加菜單項(QAction)
QAction *QMenu::addAction(const QString &text);
QAction *QMenu::addAction(const QIcon &icon, const QString &text);// 添加分割線
QAction *QMenu::addSeparator();

菜單項 QAction 事件的處理

單擊菜單項, 該對象會發出一個信號

// 點擊QAction對象發出該信號
[signal] void QAction::triggered(bool checked = false);// save_action 是某個菜單項對象名, 點擊這個菜單項會彈出一個對話框
connect(ui->save_action, &QAction::triggered, this, [=]()
{QMessageBox::information(this, "Triggered", "我是菜單項, 你不要調戲我...");
});

工具欄

一共有兩種方式, 這里依次為大家進行介紹。

方式1:先創建QAction對象, 然后拖拽到工具欄中, 和添加菜單項的方式相同

方式2:如果不通過UI界面直接操作,那么就需要調用相關的API函數了

// 在QMainWindow窗口中添加工具欄
void QMainWindow::addToolBar(Qt::ToolBarArea area, QToolBar *toolbar);
void QMainWindow::addToolBar(QToolBar *toolbar);
QToolBar *QMainWindow::addToolBar(const QString &title);// 將Qt控件放到工具欄中
// 工具欄類: QToolBar
// 添加的對象只要是QWidget或者啟子類都可以被添加
QAction *QToolBar::addWidget(QWidget *widget);// 添加QAction對象
QAction *QToolBar::addAction(const QString &text);
QAction *QToolBar::addAction(const QIcon &icon, const QString &text);// 添加分隔線
QAction *QToolBar::addSeparator()

通過代碼的方式對工具欄進行操作

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 添加第二個工具欄QToolBar* toolbar = new QToolBar("toolbar");this->addToolBar(Qt::LeftToolBarArea, toolbar);// 給工具欄添加按鈕和單行輸入框ui->toolBar->addWidget(new QPushButton("搜索"));QLineEdit* edit = new QLineEdit;edit->setMaximumWidth(200);edit->setFixedWidth(100);ui->toolBar->addWidget(edit);// 添加QAction類型的菜單項ui->toolBar->addAction(QIcon(":/er-dog"), "二狗子");
}

工具欄的屬性設置

在UI窗口的樹狀列表中, 找到工具欄節點, 就可以到的工具欄的屬性設置面板了, 這樣就可以根據個人需求對工具欄的屬性進行設置和修改了。

狀態欄

一般情況下, 需要在狀態欄中添加某些控件, 顯示某些屬性, 使用最多的就是添加標簽 QLabel

// 類型: QStatusBar
void QStatusBar::addWidget(QWidget *widget, int stretch = 0);[slot] void QStatusBar::clearMessage();
[slot] void QStatusBar::showMessage(const QString &message, int timeout = 0);

相關的操作代碼

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);// 狀態欄添加子控件// 按鈕QPushButton* button = new QPushButton("按鈕");ui->statusBar->addWidget(button);// 標簽QLabel* label = new QLabel("hello,world");ui->statusBar->addWidget(label);
}

停靠窗口

停靠窗口可以通過鼠標拖動停靠到窗口的上、下、左、右,或者浮動在窗口上方。如果需要這種類型的窗口必須手動添加,如果在非QMainWindow類型的窗口中添加了停靠窗口, 那么這個窗口是不能移動和浮動的。
浮動窗口在工具欄中, 直接將其拖拽到UI界面上即可。(Dock Widget)

停靠窗口也有一個屬性面板, 我們可以在其對應屬性面板中直接進行設置和修改相關屬性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209826.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209826.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209826.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

谷歌AI新篇章:Gemini引領股價飆升,挑戰OpenAI霸主地位

導語&#xff1a; “ 在人工智能領域的一場激烈角逐中&#xff0c;谷歌母公司Alphabet以其全新AI大模型Gemini&#xff0c;于周四收盤時引爆股市&#xff0c;股價激增5.3%&#xff0c;市值一日增長超800億美元。這一躍升不僅展示了谷歌在技術創新上的決心&#xff0c;也是對微軟…

GPT4停止訂閱付費了怎么辦? 怎么升級ChatGPT plus?提供解決方案

11月中旬日OpenAI 暫時關閉所有的升級入口之后&#xff0c;很多小伙伴就真的在排隊等待哦。其實有方法可以繞開排隊&#xff0c;直接付費訂閱升級GPT的。趕緊用起來立馬“插隊”成功&#xff01;親測~~~ 一、登錄ChatGPT賬號 1、沒有賬號可以直接注冊一個&#xff0c;流程超級…

前端使用視頻作為背景圖的方法

實現思路 通過 video source 引入視頻&#xff0c;并對視頻播放屬性進行設置&#xff0c;再通過 css 使視頻覆蓋背景即可。 代碼 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>有開發問題可聯系作者</title>…

學習git后,真正在項目中如何使用?

文章目錄 前言下載和安裝Git克隆遠程倉庫PyCharm鏈接本地Git創建分支修改項目工程并提交到本地倉庫推送到遠程倉庫小結 前言 網上學習git的教程&#xff0c;甚至還有很多可視化很好的git教程&#xff0c;入門git也不是什么難事。但我發現&#xff0c;當我真的要從網上克隆一個…

ubuntu18.04安裝pcl1.11.1

一、安裝pcl1.11.1依賴 sudo apt-get update sudo apt-get install git build-essential linux-libc-dev sudo apt-get install cmake cmake-gui sudo apt-get install libusb-1.0-0-dev libusb-dev libudev-dev sudo apt-get install mpi-default-dev openmpi-bin openmpi-…

SQL事務的開啟,提交和回滾

在處理數據庫數據的時候會出現一種情況就是我們刪除兩個關聯的表其中一個表的信息&#xff0c;另一個表也需要改動&#xff0c;但是我們SQL語句在同時更改兩個表的同時&#xff0c;難免會出現一個表修改成功&#xff0c;另一個出現錯誤&#xff0c;這時候表與表之間就會出現矛盾…

webrtc網之sip轉webrtc

OpenSIP是一個開源的SIP&#xff08;Session Initiation Protocol&#xff09;服務器&#xff0c;它提供了一個可擴展的基礎架構&#xff0c;用于建立、終止和管理VoIP&#xff08;Voice over IP&#xff09;通信會話。SIP是一種通信協議&#xff0c;用于建立、修改和終止多媒體…

geolife 筆記:將所有軌跡放入一個DataFrame

單條軌跡的處理&#xff1a;geolife筆記&#xff1a;整理處理單條軌跡-CSDN博客 1 加載數據 import pandas as pd import numpy as np import datetime as dt import osdata_dir Geolife Trajectories 1.3/Data/ 1.1 列出所有文件夾 dirlist os.listdir(data_dir) dirlist…

Esxi登錄超時:“由于不活動超時,您已被注銷“,修改UserVars.HostClientSessionTimeout為0永不超時

Esxi登錄超時:“由于不活動超時&#xff0c;您已被注銷”,修改UserVars.HostClientSessionTimeout為0永不超時 UserVars.HostClientSessionTimeout0永不超時 Esxi網頁登錄后,一段時間不操作就會被注銷 提示: 由于不活動超時&#xff0c;您已被注銷 主機→管理→系統→高級設…

【linux】查看CPU和內存信息

之前咱們一起學習了查看內存的和CPU的命令。 ?mpstat &#xff1a; 【linux】 mpstat 使用 uptime&#xff1a;【Linux】 uptime命令使用 CPU的使用率&#xff1a;【linux】查看CPU的使用率 nmon &#xff1a;【linux】nmon 工具使用 htop &#xff1a;【linux】htop 命令…

文件格式對齊、自定義快捷鍵、idea

文件格式對齊 Shift Alt F 自動格式化代碼的快捷鍵&#xff08;如何配置自動格式化&#xff09; 日常編碼必備idea快捷鍵 [VS Code] 入門-自定鍵盤快捷鍵 文件格式對齊 文件格式對齊通常是通過編輯器或IDE提供的快捷鍵或命令完成的。以下是一些常見編輯器和IDE中進行文件…

四、C#筆記

/// <summary> /// 第七章&#xff1a;創建并管理類和對象 /// </summary> namespace Chapter7 { class Program { public static int Num 0;//7.6.1創建共享字段 public const double PI 3.1415926;//7.6.2使用const關鍵字創建靜態字段…

快速認識什么是:Docker

Docker&#xff0c;一種可以將軟件打包到容器中并在任何環境中可靠運行的工具。但什么是容器以及為什么需要容器呢&#xff1f;今天就來一起學快速入門一下Docker吧&#xff01;希望本文對您有所幫助。 假設您使用 Cobol 構建了一個在某種奇怪風格的 Linux 上運行的應用程序。您…

Linux C語言 41-進程間通信IPC之共享內存

Linux C語言 41-進程間通信IPC之共享內存 本節關鍵字&#xff1a;C語言 進程間通信 共享內存 shared memory 相關庫函數&#xff1a;shmget、shmat、shmdt、shmctl 什么是共享內存&#xff1f; 共享內存&#xff08;Shared Memory&#xff09;指兩個或多個進程共享一個給定的…

InnoDB Architecture MySQL 5.7 vs 8.0

innodb-architecture-5-7 innodb-architecture-8-0 圖片均來源于MySQL官網

【Vue】props與$emit的簡單理解

Vue組件 組件是Vue中不可或缺的一個功能&#xff0c;它可以將一個頁面劃分為多個獨立的內部組件&#xff0c;方便代碼的管理。 定義組件 <body><div id"App"><bcomp></bcomp></div><script>const app Vue.createApp({})cons…

【2023傳智杯-新增場次】第六屆傳智杯程序設計挑戰賽AB組-ABC題復盤解題分析詳解【JavaPythonC++解題筆記】

本文僅為【2023傳智杯-第二場】第六屆傳智杯程序設計挑戰賽-題目解題分析詳解的解題個人筆記,個人解題分析記錄。 本文包含:第六屆傳智杯程序設計挑戰賽題目、解題思路分析、解題代碼、解題代碼詳解 文章目錄 一.前言二.賽題題目A題題目-B題題目-C題題目-二.賽題題解A題題解-…

Servlet should have a mapping

第一種可能&#xff1a; 你就是沒寫Servlet <servlet><servlet-name>SpringMVC</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置springMVC需要加載的配置文件--><init-par…

Android studio生成二維碼

1.遇到的問題 需要生成一個二維碼&#xff0c;可以使用zxing第三方組件&#xff0c;增加依賴。 //生成二維碼 implementation com.google.zxing:core:3.4.1 2.代碼 展示頁面 <ImageViewandroid:id"id/qrCodeImageView"android:layout_width"150dp"an…

ubuntu 如何修改主機名稱

UBUNTU 2018.04 LTS 64位 修改當前電腦的主機名稱。 操作步驟如下&#xff1a; 假設你的主機名為AAAAA &#xff0c; 打算修改為BBBBB。開機進入桌面。 打開一個終端。命令行下&#xff0c;使用vi /etc/hostname指令&#xff0c;編輯主機名稱。將hostname文件里的AAAAA改為BB…