2011-07-19 31 views
1

我是QT Creator的新手。我確實創建了一個菜單:Login ||打開。點擊登錄後,我想看到一個行編輯和一個按鈕。點擊「打開」後,我想在窗口中看到一張圖片。根據我在菜單欄中單擊的內容,我可以更改同一個窗口的界面嗎?我怎樣才能做到這一點?QT Creator主窗口 - 如何更改菜單中每個元素的界面?

+0

你有沒有考慮[QStackWidget](http://doc.qt.nokia.com/latest/qstackedwidget.html )? 「QStackedWidget類提供了一堆窗口小部件,其中一次只能看到一個窗口小部件」 – vrince

+0

我沒有。 thx很多,你能給我一些鏈接的例子嗎? – skywak

+0

我試圖找到一些有第一個鏈接,但沒有找到任何...試一試它是一種直截了當,如果你遵循Qt精神(從Qt文檔中給定的一段代碼開始)。如果您有任何問題,請不要猶豫編輯您的問題。 – vrince

回答

1

我做了類似這樣的事情 - 一個有幾個主要區域的應用程序,由頂部的圖標欄切換。 我使用了一個QStackWidget來堆疊不同的應用程序區域,一組使用設計器創建的QActions,以及一個QActionGroup來實現切換。 當動作被標記爲「可檢查」並分組在QActionGroup中時,QToolBar僅允許其中一個處於活動狀態。

這裏是我的代碼的簡化提取物:

// MyApp.h 
#include <QMainWindow>  
class QAction; 
class QActionGroup; 

namespace Ui { 
    class MyApp; 
} 

class MyApp: public QMainWindow 
{  
    Q_OBJECT 

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

public slots: 
    void showSection(QAction* a); 

private: 
    Ui::MyApp *ui; 
    QActionGroup* sections; 
}; 

 

//MyApp.cpp 
#include "structureapp.h" 
#include "ui_structureapp.h" 

#include <QActionGroup> 

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

    /* Populate section list */ 

    /* Page indices for the stack widget*/ 
    ui->actionSectionOne->  setData(0); 
    ui->actionSectionTwo->  setData(1); 
    ui->actionSectionThree-> setData(2); 

    sections->addAction(ui->actionSectionOne); 
    sections->addAction(ui->actionSectionTwo); 
    sections->addAction(ui->actionSectionThree); 


    ui->mainToolBar->addSeparator(); 

    connect(sections, SIGNAL(triggered(QAction*)), this, SLOT(showSection(QAction*))); 

    /* Show the default section */ 
    ui->actionContentSection->trigger(); 
} 

MyApp::~MyApp() 
{ 
    delete ui; 
} 

void MyApp::showSection(QAction *a) 
{ 
    ui->mainArea->setCurrentIndex(a->data().toInt()); 
} 
0

是的,你可以。正如我所解釋的earlier,每個菜單項都是一個信號,並且連接到一個插槽。有兩個不同的菜單條目,你有兩個信號,你可以將它們連接到兩個不同的插槽。所以,你可以命名你的第一個插槽onLogin,以及第二個插槽onOpen。 (它有助於選擇描述性名稱,所以當你在星期一回來時你會了解你的程序)。

現在,它的插槽onLogin,你把代碼登錄。在插槽onOpen中,您放置了其他代碼。但是請考慮一下如果你一個接一個地點擊兩個菜單條目會發生什麼。應該甚至可能嗎?如果不是,您可能需要另一種解決方案。使用QDialog進行登錄很常見。當一個對話框處於活動狀態時,您不能使用主應用程序的菜單,因此當您忙於登錄時,您無法按需要點擊onOpen

相關問題