Qt學習三 - 菜單欄、工具欄、狀態欄


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    /** QAction是Qt中用於添加動作的類,
     * 可以將它添加在菜單,作為一個菜單項,也可以添加到工具欄,作為一個工具欄按鈕
     * 其中參數一是設置該操作按鈕的圖標,":/images/icon"是資源文件的路徑
     * 參數二中"&"號代表設置快捷鍵為"Alt+o"
     */
    QAction *open = new QAction(QIcon(":/images/icon"),"Open(&O)",this);

    /**
     * 設置快捷鍵為"Ctrl+o"
     * 這里使用QKeySequence類是為了可以跨平台,例如pc和mac下的鍵盤不一樣,Qt可以根據平台不同設置相應的快捷鍵
     * 該類中為我們定義了很多內置的快捷鍵,可以直接使用,例如下面注釋的一行。
     * 也可以自己創建一個QKeySequence類,傳入我們想要設置的快捷鍵。
     */
    //open->setShortcut(QKeySequence(QKeySequence::Open));
    open->setShortcut(QKeySequence("Ctrl+O"));

    //設置工具提示
    open->setToolTip("open file");
    //狀態欄提示
    open->setStatusTip("open existing file");

    //在菜單欄中添加一個菜單。因為Qt界面工程,默認自帶了菜單欄、工具欄和狀態欄,所以我們可以直接使用ui->menuBar來調用
    QMenu *file = ui->menuBar->addMenu("File(&F)");
    //將open動作作為一個菜單項添加到file菜單中
    file->addAction(open);

    //添加到工具欄
    ui->mainToolBar->addAction(open);

    //創建狀態欄,Qt界面工程已經創建
    //statusBar();
}

狀態欄可以顯示臨時信息、永久信息和其他組件,例如:

statusBar()->showMessage("歡迎!");

運行結果如下:

還可以設定顯示時間,毫秒為單位,例如:

    statusBar()->showMessage("歡迎!",2000);

這樣信息會在2秒后消失。

下面在狀態欄中顯示一些組件,聲明一個私有變量

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QLabel *statusLabel;
};

然后在構造函數中添加,如下代碼

    statusLabel = new QLabel(this);
    statusLabel->setFrameShape(QFrame::WinPanel);
    statusLabel->setFrameShadow(QFrame::Sunken);
    ui->statusBar->addWidget(statusLabel);
    statusLabel->setText("歡迎!!!");

運行如下:

這樣就可以在需要顯示信息的時候,調用statusLabel->setText()來設置了。

狀態欄顯示永久信息需要使用addPermanentWdget函數來添加一個可以顯示信息的組建,它會顯示在狀態欄的右側,不會被臨時信息所遮蓋。

    QLabel *permanent = new QLabel;
    permanent->setFrameStyle(QFrame::Box | QFrame::Sunken);
    permanent->setText(
      tr("<a href=\"http://www.baidu.com\">baidu.com</a>"));
    permanent->setTextFormat(Qt::RichText);     //設置為超文本
    permanent->setOpenExternalLinks(true);      //開啟自動打開超鏈接
    ui->statusBar->addPermanentWidget(permanent);

運行結果如下:

在Qt中,mainwindow類提供了menuBar()函數來返回一個菜單欄(QMenuBar),如果沒有菜單欄則會新建一個;提供了addToolBar()函數來新加一個工具欄(QToolBar);以及返回狀態欄(QStatusBar)的statusBar()函數。上面的代碼沒有使用這三個函數,是因為Qt界面工程默認已經創建好了。這三個函數僅在mainwindow類中存在,QDialog和QWidget等其他類中都沒有提供這三個函數。那么如果我們需要在QDialog或者QWidget類中使用菜單欄、工具欄和狀態欄時怎么辦?QMenuBar,QToolBar,QStatusBar都繼承自QWidget,所以我們可以像使用其他QWidget子類那樣進行操作。例如:

    QMenuBar *menuBar = new QMenuBar(this);
    QMenu *menu = menuBar->addMenu("&File");
    QAction *open = new QAction("&Open1",this);
    open->setStatusTip("open exsiting file");
    menu->addAction(open);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM