【Qt學習筆記】(四)Qt窗口

Qt窗口

  • 1 菜單欄
    • 1.1 創建菜單欄
    • 1.2 在菜單欄中添加菜單
    • 1.3 創建菜單項
    • 1.4 在菜單項之間添加分割線
    • 1.5 給菜單項添加槽函數
    • 1.6 給菜單項添加快捷鍵
  • 2 工具欄
    • 2.1 創建工具欄
    • 2.2 設置停靠位置
    • 2.3 設置浮動屬性
    • 2.4 設置移動屬性
    • 2.5 添加 Action
  • 3 狀態欄
    • 3.1 狀態欄的創建
    • 3.2 在狀態欄中顯示實時消息
    • 3.3 狀態欄中放入控件
  • 4 浮動窗口
    • 4.1 浮動窗口的創建
    • 4.2 給浮動窗口添加控件
  • 5 對話框
    • 5.1 對話框介紹
    • 5.2 創建對話框
    • 5.3 對話框的內存釋放問題
    • 5.4 自定義對話框
    • 5.5 模態對話框與非模態對話框
    • 5.6 Qt 內置對話框
      • 5.6.1 消息對話框 QMessageBox
      • 5.6.2 顏色對話框
      • 5.6.3 文件對話框
      • 5.6.4 字體對話框 QFontDialog
      • 5.6.5 輸入對話框 QInputDialog

Qt窗口是通過QMainWindow類來實現的。
QMainWindow是一個為用戶提供主窗口程序的類,繼承自QWidget類,并且提供了一個預定義的布局。QMainWindow包含一個菜單欄(menu bar)、多個工具欄(tool bars)、多個浮動窗口(鉚接部件) (dock widgets)、一個狀態欄(status bar)和一個中心部件(central widget),它是許多應用程序的基礎,如文本編輯器,圖片編輯器等。如下圖為QMainwindow中各組件所處的位置:

在這里插入圖片描述

1 菜單欄

Qt中的菜單欄是通過QMenuBar這個類來實現的。一個主窗口最多只有一個菜單欄。位于主窗口頂部、主窗口標題欄下面。.
菜單欄中包含菜單.菜單中包含菜單項.

在這里插入圖片描述

1.1 創建菜單欄

在 ui 界面中,已經創建好了菜單欄,直接輸入對應的菜單項即可。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
也可以通過代碼的方式去添加菜單欄

菜單欄的創建可以借助于QMainWindow類提供的menuBar()函數來實現。

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//創建菜單欄QMenuBar* menubar = this->menuBar();//把菜單欄放入窗口中this->setMenuBar(menubar);
}

注意:
如果創建的代碼是
QMenuBar* menubar = new QMenuBar();
在創建項目的時候,如果沒有勾選自動生成 ui 文件,此時這種創建菜單欄的方式沒有問題。但是如果勾選了自動生成 ui 文件,這行代碼可能會引起內存泄漏。
原因是:程序已經創建好了一個 QMenuBar,當設置新的 QMenuBar 進來的時候,就會導致前者脫離 Qt 的對象樹,導致無法自動釋放內存。
在這里插入圖片描述如果窗口關閉,對象樹釋放,此時進程也就結束了,進程結束,自然所有的內存都回收給系統,上述的內存泄漏不會造成影響。但是如果這樣的代碼是出現在一個多窗口的程序中,如果涉及到窗口的頻繁跳轉切換(窗口頻繁創建銷毀),上述內存泄漏就會嚴重一些。但是實際上由于現在的計算機內存都比較充裕,上述的內存泄漏都還好。服務器程序相比于客戶端程序更害怕內存泄漏。服務器要處理很多請求,每個請求泄漏一點,請求積累下來就會累計很多。所以,我們更希望代碼寫得規范一些。

    //創建菜單欄//1.如果 QMenuBar 已經存在,直接獲取并返回//2.如果 QMenuBar 不存在,就先創建一個新的,再返回QMenuBar* menubar = this->menuBar();//把菜單欄放入窗口中//如果是獲取到已經存在 QMenuBar ,這里的設置就是自己替換自己,仍然在對象樹上this->setMenuBar(menubar);

1.2 在菜單欄中添加菜單

創建菜單,并通過QMenu提供的addMenu() 函數來添加菜單。

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//創建菜單欄//QMenuBar* menubar = this->menuBar();QMenuBar* menubar = new QMenuBar();//把菜單欄放入窗口中this->setMenuBar(menubar);//創建菜單QMenu* menu1 = new QMenu("文件");QMenu* menu2 = new QMenu("編輯");QMenu* menu3 = new QMenu("構建");//添加菜單到菜單欄中menubar->addMenu(menu1);menubar->addMenu(menu2);menubar->addMenu(menu3);
}

在這里插入圖片描述

1.3 創建菜單項

在Qt中,并沒有專門的菜單項類,可以通過QAction類,抽象出公共的動作。如在菜單中添加菜單項.

QAction可以給菜單欄使用,也可以給工具欄使用.

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//創建菜單欄//QMenuBar* menubar = this->menuBar();QMenuBar* menubar = new QMenuBar();//把菜單欄放入窗口中this->setMenuBar(menubar);//創建菜單QMenu* menu1 = new QMenu("文件");QMenu* menu2 = new QMenu("編輯");QMenu* menu3 = new QMenu("構建");//添加菜單到菜單欄中menubar->addMenu(menu1);menubar->addMenu(menu2);menubar->addMenu(menu3);//創建菜單項QAction* action1 = new QAction("open");QAction* action2 = new QAction("close");QAction* action3 = new QAction("create");//將菜單項添加到菜單上menu1->addAction(action1);menu1->addAction(action2);menu1->addAction(action3);
}

1.4 在菜單項之間添加分割線

在菜單項之間可以添加分割線。分割線如下圖所示,添加分割線是通過QMenu 類提供的addSeparator()函數來實現;
在這里插入圖片描述

    menu1->addAction(action1);menu1->addSeparator();//在 open 和 close 之間添加分割線menu1->addAction(action2);menu1->addAction(action3);

可以使用 setIcon 函數來給每個菜單項添加一個圖標。在第三章常用控件中介紹到,這里不在贅述。

1.5 給菜單項添加槽函數

在菜單項被點擊的時候,會觸發 triggered 這個信號,利用這個信號去觸發對應的槽函數

connect(action1,&QAction::triggered,this,&MainWindow::handle);void MainWindow::handle()
{qDebug() << "點擊了 open 菜單項";
}

這里只是簡單打印一下。
在這里插入圖片描述

1.6 給菜單項添加快捷鍵

添加快捷鍵的方法很簡單,只需要在創建菜單項的時候,菜單項的名字后面加個(&+添加的快捷鍵即可)

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//創建菜單欄//QMenuBar* menubar = this->menuBar();QMenuBar* menubar = new QMenuBar();//把菜單欄放入窗口中this->setMenuBar(menubar);//創建菜單QMenu* menu1 = new QMenu("文件(&F)");QMenu* menu2 = new QMenu("編輯(&E)");QMenu* menu3 = new QMenu("構建(&C)");//添加菜單到菜單欄中menubar->addMenu(menu1);menubar->addMenu(menu2);menubar->addMenu(menu3);//創建菜單項QAction* action1 = new QAction("open(&O)");QAction* action2 = new QAction("close");QAction* action3 = new QAction("create");//將菜單項添加到菜單上menu1->addAction(action1);menu1->addSeparator();//在 open 和 close 之間添加分割線menu1->addAction(action2);menu1->addAction(action3);//點擊 open 的時候觸發槽函數connect(action1,&QAction::triggered,this,&MainWindow::handle);
}

按 ALT + 快捷鍵觸發快捷鍵
在這里插入圖片描述

2 工具欄

工具欄是應用程序中集成各種功能實現快捷鍵使用的一個區域 。可以有多個,也可以沒有,它并不是應用程序中必須存在的組件。它是一個可移動的組件,它的元素可以是各種窗口組件,它的元素通常以圖標按鈕的方式存在。如下圖為工具欄的示意圖:
在這里插入圖片描述

2.1 創建工具欄

調用QMainWindow類的addToolBar()函數來創建工具欄,每增加一個工具欄都需要調用一次該函數。
如添加一個工具欄并加入一個 QAction

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QToolBar* toolBar1 = new QToolBar(this);this->addToolBar(toolBar1);
}

在這里插入圖片描述

2.2 設置停靠位置

工具欄停靠位置的設置有兩種方式。-種是在創建工具欄的同時指定停靠的位置,另一種是通過
QToolBar類提供的setAllowedAreas()函數來設置。

在創建工具欄的同時,也可以設置工具欄的位置,其默認位置是在窗口的最上面;如上述代碼,默認在最上面顯示。工具欄允許停靠的區域由QToolBar類提供的allowAreas()函數決定,其中可以設置的位置包括:

  • Qt::LeftToolBarArea停靠在左側
  • Qt::RightToolBarArea停靠在右側
  • Qt::TopToolBarArea停靠在頂部
  • Qt::BottomToolBarArea 停靠在底部
  • Qt::AllToolBarAreas 以上四個位置都可停靠
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QToolBar* toolBar1 = new QToolBar(this);this->addToolBar(toolBar1);//指定工具欄在左側顯示this->addToolBar(Qt::LeftToolBarArea,toolBar1);
}

在這里插入圖片描述
在窗口創建出來后,工具欄的位置可以依靠鼠標進行拖動
在這里插入圖片描述
方式二:使用QToolBar類提供的setAllowedAreas()函數設置允許停靠位置。如下示例:

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QToolBar* toolBar1 = new QToolBar(this);this->addToolBar(toolBar1);//指定工具欄在左側顯示this->addToolBar(Qt::LeftToolBarArea,toolBar1);//設置只允許在上側和左側停靠toolBar1->setAllowedAreas(Qt::LeftToolBarArea | Qt::TopToolBarArea);
}

2.3 設置浮動屬性

如果鼠標拖到窗口的中間位置,工具欄就會浮動在中間位置。
工具欄的浮動屬性可以通過QToolBar類提供的setFloatable()函數來設置。

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QToolBar* toolBar1 = new QToolBar(this);this->addToolBar(toolBar1);//指定工具欄在左側顯示this->addToolBar(Qt::LeftToolBarArea,toolBar1);//設置只允許在上側和左側停靠toolBar1->setAllowedAreas(Qt::LeftToolBarArea | Qt::TopToolBarArea);//設置工具欄不允許浮動toolBar1->setFloatable(false);
}

2.4 設置移動屬性

設置工具欄的移動屬性可以通過QToolBar類提供的setMovable()函數來設置。

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QToolBar* toolBar1 = new QToolBar(this);this->addToolBar(toolBar1);//指定工具欄在左側顯示this->addToolBar(Qt::LeftToolBarArea,toolBar1);//設置只允許在上側和左側停靠toolBar1->setAllowedAreas(Qt::LeftToolBarArea | Qt::TopToolBarArea);//設置工具欄不允許浮動toolBar1->setFloatable(false);//設置工具欄不允許移動toolBar1->setMovable(false);
}

設置不允許移動后,鼠標無法拖動工具欄。

2.5 添加 Action

工具欄不僅可以添加Action,也可以添加一些控件,這里以添加 Action 為例

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);QToolBar* toolBar1 = new QToolBar(this);this->addToolBar(toolBar1);//指定工具欄在左側顯示this->addToolBar(Qt::LeftToolBarArea,toolBar1);//設置只允許在上側和左側停靠toolBar1->setAllowedAreas(Qt::LeftToolBarArea | Qt::TopToolBarArea);//設置工具欄不允許浮動toolBar1->setFloatable(false);QAction* action1 = new QAction("保存");toolBar1->addAction(action1);
}

在這里插入圖片描述

3 狀態欄

**狀態欄是應用程序中輸出簡要信息的區域。**一般位于主窗口的最底部,-、一個窗口中最多只能有一個狀態欄。在Qt中,狀態欄是通過QStatusBar類來實現的。在狀態欄中可 以顯示的消息類型有:

  • 實時消息:如當前程序狀態
  • 永久消息:如程序版本號,機構名稱
  • 進度消息:如進度條提示,百分百提示

3.1 狀態欄的創建

狀態欄和菜單欄一樣,如果創建項目的時候勾選了創建 ui 界面,那么就會自動生成一個狀態欄。在這里插入圖片描述

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//創建狀態欄,已經存在就調用存在的,不存在就創建QStatusBar* stbar = this->statusBar();//將狀態欄設置到窗口中this->setStatusBar(stbar);
}

3.2 在狀態欄中顯示實時消息

    //狀態欄中顯示 2 秒的消息stbar->showMessage("這是一個狀態消息",2000);

在這里插入圖片描述
將后面的數字改為 0 ,則是永久顯示

3.3 狀態欄中放入控件

狀態欄也可放入一些控件,這里以放入 label 為例

    QLabel* label = new QLabel("這是一個標簽",this);stbar->addWidget(label);

在這里插入圖片描述
調整顯示消息的位置

    QLabel* label2 = new QLabel("這是一個標簽2",this);stbar->addPermanentWidget(label2);

在這里插入圖片描述

4 浮動窗口

在Qt中,浮動窗口也稱之為鉚接部件。浮動窗口是通過QDockWidget類來實現浮動的功能。浮動窗口一般是位于核心部件的周圍,可以有多個。

4.1 浮動窗口的創建

浮動窗口的創建是通過QDockWidget類提供的構造方法QDockWidget()函數動態創建的;示例如下

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//創建浮動窗口QDockWidget* dockwidget = new QDockWidget("浮動窗口",this);//將浮動窗口置于當前窗口中,同時設置停靠在左側addDockWidget(Qt::LeftDockWidgetArea,dockwidget);
}

4.2 給浮動窗口添加控件

要想給浮動窗口內部添加一些控件,需要創建一個單獨的 QWidget ,把要添加的控件加入到 QWidget 中,然后再把這個 QWidget 設置到 dockWidget 中。

ainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//創建浮動窗口QDockWidget* dockwidget = new QDockWidget("浮動窗口",this);//將浮動窗口置于當前窗口中,同時設置停靠在左側addDockWidget(Qt::LeftDockWidgetArea,dockwidget);//創建一個 QWidget ,并加入到 dockWidget 中QWidget* container = new QWidget();dockwidget->setWidget(container);//創建一個標簽和一個垂直的布局管理器,把布局管理器加入到 Qwidget 中//再把控件加入到布局管理器中QLabel* label = new QLabel("這是一個標簽",this);QVBoxLayout* vlayout = new QVBoxLayout();container->setLayout(vlayout);vlayout->addWidget(label);
}

在這里插入圖片描述

5 對話框

5.1 對話框介紹

對話框是GUI程序中不可或缺的組成部分。一些不適合在主窗口實現的功能組件可以設置在對話框中。對話框通常是一個頂層窗口,出現在程序最上層,用于實現短期任務或者簡潔的用戶交互。Qt常用的內置對話框有: QFiledialog (文件對話框)、QColorDialog (顏色對話框)、QFontDialog(字體對話框)、QInputDialog (輸入對話框) 和QMessageBox (消息框)

5.2 創建對話框

在創建項目的時候,選擇 QDialog
在這里插入圖片描述
運行程序,可以看到通過基于 QDialog 作為父類創建出來的程序窗口和之前通過 QWidget 創建出來的非常相似。
在實際開發中,往往不會直接在創建項目的時候繼承自 QDialog,而是在代碼中創建其他的類,讓其他的類繼承 QDialog。主窗口不會作為一個對話框,而是在主窗口中產生一個對話框。

代碼示例:主窗口中通過點擊按鈕,彈出一個新的對話框

創建項目時,選擇 QMainWindow
在這里插入圖片描述
添加一個按鈕,并編寫對應的槽函數

void MainWindow::on_pushButton_clicked()
{//創建一個對話框QDialog* dialog = new QDialog(this);//設置對話框大小dialog->resize(400,300);//設置對話框標題dialog->setWindowTitle("標題");dialog->show();
}

運行程序,并點擊按鈕,即可彈出對話框
在這里插入圖片描述

5.3 對話框的內存釋放問題

在上述代碼示例中,每次點擊按鈕生成對話框,就會創建一個新的 QDialog 對象,并進行顯示。如果點擊很多次,就會產生很多個這樣的對象,而且光是點擊關閉對話框是沒法進行內存釋放的,所以很容易造成內存泄漏問題。
所以 Qt 給出了這樣一個操作:當用戶點擊對話框關閉按鈕的時候,觸發 delete 操作。

dialog->setAttribute(Qt::WA_DeleteOnClose);

5.4 自定義對話框

創建一個 QMainWindow 項目后,點擊新建文件,點擊 Qt 設計器界面類
在這里插入圖片描述
這里選擇第三個
在這里插入圖片描述
一直點擊下一步,Qt 會為我們自動創建一個對話框界面
在這里插入圖片描述
可以看到,項目里面多了一些對話框的文件,包括設計對話框的 ui 界面

進入 ui 界面,加入一些控件,并完成按鈕的槽函數
在這里插入圖片描述

#include "dialog.h"
#include "ui_dialog.h"Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);
}Dialog::~Dialog()
{delete ui;
}void Dialog::on_pushButton_clicked()
{this->close();
}

回到 QMainWindow 的ui 界面,加入一個按鈕,設計彈出對話框
在這里插入圖片描述

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "dialog.h"
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{Dialog* dialog = new Dialog(this);dialog->show();dialog->setAttribute(Qt::WA_DeleteOnClose);
}

注意這里包含的頭文件不是 QDialog,而是我們自己的類,繼承自 QDialog
在這里插入圖片描述

5.5 模態對話框與非模態對話框

模態對話框指的是:顯示后無法與父窗口進行交互,是一種阻塞式的對話框。使用QDialog::exec()函數調用。
模態對話框適用于必須依賴用戶選擇的場合,比如消息顯示,文件選擇,打印設置等。

非模態對話框顯示后獨立存在,可以同時與父窗口進行交互,是一種非阻塞式對話框,使用
QDialog:show()函數調用。

將上述代碼的 show 函數改成 exec 函數,就是模態對話框。
運行程序,當窗口彈出后,無法操作父窗口

void MainWindow::on_pushButton_clicked()
{Dialog* dialog = new Dialog(this);//dialog->show();dialog->exec();dialog->setAttribute(Qt::WA_DeleteOnClose);
}

在這里插入圖片描述

5.6 Qt 內置對話框

Qt提供了多種可復用的對話框類型,即Qt標準對話框。Qt 標準對話框全部繼承于QDialog類。常用標準對話框如下:

在這里插入圖片描述

5.6.1 消息對話框 QMessageBox

消息對話框是應用程序中最常用的界面元素。消息對話框主要用于為用戶提示重要信息,強制用戶進行選擇操作。
QMessageBox類中定義了靜態成員函數,可以直接調用創建不同風格的消息對話框,其中包括:
在這里插入圖片描述
在這里插入圖片描述
也可采用 setIcon 函數,輸入對應的枚舉類型,設置消息對話框類型
在這里插入圖片描述
代碼示例 : 警告類型對話框
在 ui 窗口上設置一個按鈕,然后設置對應的槽函數

void MainWindow::on_pushButton_clicked()
{// 創建 QMessageBoxQMessageBox* messageBox = new QMessageBox(this);messageBox->setWindowTitle("對話框窗口標題");messageBox->setText("這是對話框文本");//設置對話框類型messageBox->setIcon(QMessageBox::Warning);//在消息對話框上設置按鈕messageBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Save | QMessageBox::Cancel);messageBox->exec();messageBox->setAttribute(Qt::WA_DeleteOnClose);
}

其中設置對話框上的按鈕,Qt 也已經枚舉好了
在這里插入圖片描述

運行程序,查看效果
在這里插入圖片描述
代碼示例:通過 exec 函數的返回值獲得對話框被點擊了哪個按鈕
exec 函數是設定對話框是模態對話框,同時它也有一個返回值,返回值就是對話框被選中了哪個按鈕的值。

void MainWindow::on_pushButton_clicked()
{// 創建 QMessageBoxQMessageBox* messageBox = new QMessageBox(this);messageBox->setWindowTitle("對話框窗口標題");messageBox->setText("這是對話框文本");//設置對話框類型messageBox->setIcon(QMessageBox::Warning);//在消息對話框上設置按鈕messageBox->setStandardButtons(QMessageBox::Ok | QMessageBox::Save | QMessageBox::Cancel);int result = messageBox->exec();//獲取到返回值if(result == QMessageBox::Ok){qDebug() <<"QMessageBox::Ok";}else if(result == QMessageBox::Save){qDebug() << "QMessageBox::Save";}else if(result == QMessageBox::Cancel){qDebug() << "result == QMessageBox::Cancel";}messageBox->setAttribute(Qt::WA_DeleteOnClose);
}

運行程序,查看效果
當我們點擊 OK 后,就執行對應的代碼
在這里插入圖片描述

代碼示例:以調用函數的方式彈出對話框
在 ui 界面創建一個彈出對話框的按鈕,然后編寫對應的槽函數

void MainWindow::on_pushButton_clicked()
{int result = QMessageBox::information(this,"對話框標題","對話框文本",QMessageBox::Ok | QMessageBox::Cancel);if(result == QMessageBox::Ok){qDebug() <<"QMessageBox::Ok";}else if(result == QMessageBox::Cancel){qDebug() << "QMessageBox::Cancel";}
}

運行程序,查看效果
在這里插入圖片描述

5.6.2 顏色對話框

顏色對話框的功能是允許用戶選擇顏色。繼承自QDialog類。顏色對話框如下圖示:
在這里插入圖片描述
在這里插入圖片描述
代碼示例:創建一個顏色對話框
在 ui 界面創建一個按鈕,并完成對應的槽函數
在這里插入圖片描述

void MainWindow::on_pushButton_clicked()
{
//這個函數靜態函數,不必創建對話框對象就可直接使用QColor color = QColorDialog::getColor(QColor(255,0,0),this,"選擇顏色");qDebug() << color;//打印
}

QColor(255,0,0),是設置RGB,這里是紅色。不了解的讀者可以看看這篇文章的2.11
常用控件

運行程序,查看效果
在這里插入圖片描述
這里默認選擇紅色,點擊確定。
打印結果如下:
在這里插入圖片描述
這里A指的是 Alpha,是不透明度
使用 0 ~ 1 表示 RGB的值,可以是小數
1 對應到整數的 255
0 對應到整數的 0

5.6.3 文件對話框

文件對話框用于應用程序中需要打開一個外部文件或需要將當前內容存儲到指定的外部文件。

使用 getOpenFileName 打開文件,getSaveFileName 保存文件。
此處的打開 / 保存的功能是需要我們額外去實現的,這里只是簡單介紹一下。

代碼示例:彈出打開 / 保存 文件窗口
在 ui 界面上創建兩個按鈕,并完成對應的槽函數
在這里插入圖片描述

void MainWindow::on_pushButton_clicked()
{QString filePath = QFileDialog::getOpenFileName(this);qDebug() << filePath;
}void MainWindow::on_pushButton_2_clicked()
{QString filePath = QFileDialog::getSaveFileName(this);qDebug() << filePath;
}

運行程序,分別點擊兩個按鈕
在這里插入圖片描述

5.6.4 字體對話框 QFontDialog

Qt中提供了預定義的字體對話框類QFontDialog,用于提供選擇字體的對話框部件。
使用 getFont 函數彈出字體對話框
代碼示例:彈出字體對話框
在 ui 界面上設置一個按鈕,并完全相應的槽函數
在這里插入圖片描述

void MainWindow::on_pushButton_clicked()
{bool ok = false;//點擊對話框的ok,ok 被設為 true,點擊cancel設為 falseQFont font = QFontDialog::getFont(&ok);qDebug() << "ok = " << ok;//查看 ok 的值qDebug() << font;//返回字體的相關參數
}

5.6.5 輸入對話框 QInputDialog

Qt中提供了預定義的輸入對話框類: QInputDialog, 用于進行臨時數據輸入的場合。

有 getInt 函數輸入一個整數,getDouble 函數輸入一個浮點數,getItem 函數輸入一個條目,可提前添加條目進行選擇

代碼示例:整數數據輸入對話框

在 ui 界面設置一個按鈕,并完成相應的槽函數
在這里插入圖片描述

void MainWindow::on_pushButton_clicked()
{int result = QInputDialog::getInt(this,"整數輸入對話框","請輸入一個整數: ");qDebug() << result;
}

執行程序
在這里插入圖片描述
代碼示例:打開選擇條目對話框
在這里插入圖片描述

void MainWindow::on_pushButton_2_clicked()
{QStringList items;items.push_back("1");items.push_back("2");items.push_back("3");items.push_back("4");QString item = QInputDialog::getItem(this,"條目輸入對話框","請輸入條目",items);qDebug() << item;
}

運行程序,查看效果
在這里插入圖片描述

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

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

相關文章

2024最新算法:冠豪豬優化算法(CPO)求解23個基準函數

一、冠豪豬優化算法 冠豪豬優化算法(Crested Porcupine Optimizer&#xff0c;CPO)由Mohamed Abdel-Basset等人于2024年提出&#xff0c;該算法模擬冠豪豬的四種不同保護機制&#xff1a;視覺、聽覺、氣味和物理攻擊。第一和第二防御技術&#xff08;視覺和聽覺&#xff09;反…

盤點 | IT行業哪些認證含金量高

微思網絡 廈門微思網絡 作為一名IT人員&#xff0c;誰沒考幾個證 ——值得考的證書擁有的特性 ? 獲政府、企業和從業者認可&#xff1b; ? 持證人數多&#xff0c;業內共識度高&#xff1b; ? 幫持證者加分&#xff0c;快速提薪。 系統網絡方向認證 01 華為認證 華為…

設計模式學習筆記 - 設計原則 - 7.DRY 原則及提高代碼復用性

前言 DRY 原則&#xff0c;英文描述為&#xff1a; Don’t Repeat Yourself。中文直譯&#xff1a;不要重復自己。將它應用在編程中&#xff0c;可理解為&#xff1a;不要寫重讀的代碼。 可能你認為&#xff0c;這個原則很簡單。只要兩段代碼長得一樣&#xff0c;那就是違反 …

【機器學習】包裹式特征選擇之遞歸特征消除法

&#x1f388;個人主頁&#xff1a;豌豆射手^ &#x1f389;歡迎 &#x1f44d;點贊?評論?收藏 &#x1f917;收錄專欄&#xff1a;機器學習 &#x1f91d;希望本文對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出指正&#xff0c;讓我們共同學習、交流進…

電磁兼容(EMC):電解電容低阻如何選擇詳解

目錄 1 為何要選低阻電解電容 2 電解電容等效高頻等效電路 3 不同廠家ESR參數 4 高頻ESR特性 5 Low ESR鋁電解電容 1 為何要選低阻電解電容 在EMI超標時&#xff0c;將普通電解電容更換為低阻電解電容時&#xff0c;便通過了。這是因為低阻電解電容降低了功率回路的輻射電…

數字化轉型導師堅鵬:證券公司數字化轉型戰略、方法與案例

證券公司數字化轉型戰略、方法與案例 課程背景&#xff1a; 數字化轉型背景下&#xff0c;很多機構存在以下問題&#xff1a; 不清楚證券公司數字化轉型的發展戰略&#xff1f; 不知道證券公司數字化轉型的核心方法&#xff1f; 不知道證券公司數字化轉型的成功案例&am…

LLM 系列——BERT——論文解讀

一、概述 1、是什么 是單模態“小”語言模型&#xff0c;是一個“Bidirectional Encoder Representations fromTransformers”的縮寫&#xff0c;是一個語言預訓練模型&#xff0c;通過隨機掩蓋一些詞&#xff0c;然后預測這些被遮蓋的詞來訓練雙向語言模型&#xff08;編碼器…

【計算機網絡通信】計算機之間的局域網通信和互聯網通信方法(附Python和C#代碼)

文章目錄 前言一、局域網通信1.1 基本原理和方法1.1.1 獲取本地ip1.1.2 實現局域網內的廣播1.1.3 進行局域網通信 1.2 實現多客戶端連接1.3 Python源碼1.4 C#源碼1.5 可能存在的問題 二、互聯網通信2.1 實現原理2.1.1 內網穿透軟件2.1.2 實現互聯網通信 2.2 Python源碼2.3 C#源…

基于Java的超市商品管理系統(Vue.js+SpringBoot)

目錄 一、摘要1.1 簡介1.2 項目錄屏 二、研究內容2.1 數據中心模塊2.2 超市區域模塊2.3 超市貨架模塊2.4 商品類型模塊2.5 商品檔案模塊 三、系統設計3.1 用例圖3.2 時序圖3.3 類圖3.4 E-R圖 四、系統實現4.1 登錄4.2 注冊4.3 主頁4.4 超市區域管理4.5 超市貨架管理4.6 商品類型…

牛客小白月賽85_D-阿里馬馬和四十大盜

非常非常非常有意思的一道題,正好寫一下做題思路 對于到不了的情況,那就是存在連續>0的區間,該區間和>m,這樣不管怎么補血一定過不去,cin的時候,就可以判斷 最開始我以為是貪心,發現當前區間走不過去那就返回上一個0點補血,但就是過不去 突然我發現這個樣例很有意思 1…

Vant Weapp

Vant Weapp - 輕量、可靠的小程序 UI 組件庫 van-radio name 是一個字符串&#xff0c;無法傳對象的處理 以及 mpx 多層嵌套 for 循環處理 <viewwx:for"{{questionList}}"wx:for-item"question" // item 重命名wx:for-index"questionIndex"…

一文了解docker與k8s

隨著 k8s 作為容器編排解決方案變得越來越流行&#xff0c;有些人開始拿 Docker 和 k8s 進行對比&#xff0c;不禁問道&#xff1a;Docker 不香嗎&#xff1f; k8s 是 kubernetes 的縮寫&#xff0c;8 代表中間的八個字符。 其實 Docker 和 k8s 并非直接的競爭對手兩者相互依存…

Qt外部調用進程類QProcess的使用

有的時候我們需要在自己程序運行過程中調用其他進程&#xff0c;那么就需要用到QProcess。 首先可以了解一些關于進程的相關知識&#xff1a;線程與進程&#xff0c;你真得理解了嗎_進程和線程的區別-CSDN博客 進程是計算機中的程序關于某數據集合上的一次運行活動&#xff0…

Java面試——Redis

優質博文&#xff1a;IT-BLOG-CN 一、Redis 為什么那么快 【1】完全基于內存&#xff0c;絕大部分請求是純粹的內存操作&#xff0c;非常快速。數據存在內存中。 【2】數據結構簡單&#xff0c;對數據操作也簡單&#xff0c;Redis中的數據結構是專門進行設計的。 【3】采用單線…

【Vue3】全局切換字體大小

VueUse 先安裝VueUse <template><header><div class"left">left</div><div class"center">center</div><div class"right">right</div></header><div><button click"cha…

飛天使-學以致用-devops知識點4-SpringBoot項目CICD實現(實驗失敗,了解大概流程)

文章目錄 代碼準備創建jenkins 任務測試推送使用項目里面的jenkinsfile 進行升級操作 文字版本流程項目構建 代碼準備 推送代碼到gitlab 代碼去叩叮狼教育找 k8s 創建jenkins 任務 創建一個k8s-cicd-demo 流水線任務 將jenkins 里面構建時候的地址還有token&#xff0c; 給到…

azure devops工具實踐分析

對azure devops此工具的功能深挖&#xff0c;結合jira的使用經驗的分析 1、在backlog的功能描述&#xff0c;可理解為需求項&#xff0c;這里包括了bug&#xff0c;從開發的角度修復bug也是個工作項&#xff0c;所以需求的范圍是真正的需求&#xff08;開發接收到的已經確認的…

已解決org.springframework.web.multipart.MultipartException處理多部分請求異常的正確解決方法,親測有效!!!

已解決org.springframework.web.multipart.MultipartException處理多部分請求異常的正確解決方法&#xff0c;親測有效&#xff01;&#xff01;&#xff01; 目錄 問題分析 出現問題的場景 報錯原因 解決思路 解決方法 總結 在Web開發過程中&#xff0c;我們經常需要處…

基于JAVA協同過濾算法網上海鮮水產推薦購物商城系統設計與實現(Springboot框架)可行性分析

博主介紹&#xff1a;黃菊華老師《Vue.js入門與商城開發實戰》《微信小程序商城開發》圖書作者&#xff0c;CSDN博客專家&#xff0c;在線教育專家&#xff0c;CSDN鉆石講師&#xff1b;專注大學生畢業設計教育和輔導。 所有項目都配有從入門到精通的基礎知識視頻課程&#xff…

【PDF技巧】網上下載的pdf文件怎么才能編輯

不知道大家有沒有遇到過網上下載的PDF文件不能編輯的情況&#xff0c;今天我們來詳細了解一下導致無法編輯的原因即解決方法有哪些。 第一種原因&#xff1a;PDF文件中的內容是否是圖片&#xff0c;如果確認是圖片文件&#xff0c;那么我們想要編輯&#xff0c;就可以先使用PD…