2013-04-17 63 views
0

我是QT新手。我開發的程序需要1024 line,每行有兩個按鈕,兩個單選按鈕和兩個lalbes。我有兩種方式。如何在沒有設計的情況下將Qbutton添加到頁面中?

  1. 在設計者模式i拖放2點* 1204的按鈕,2級* 1024的標籤和2個* 1024 單選按鈕,這是不合邏輯的。
  2. 有沒有一種方式,沒有設計師模式和拖放添加這個小部件 到頁面例如在運行時間我點擊一個按鈕和代碼隱藏 添加這個小部件(標籤,按鈕,單選按鈕)到頁面或這樣的事情。

我做了第二種方式在網絡編程。這在QT中可能嗎?或類似的東西?

回答

0

您可以通過編程創建小部件並通過佈局調整其位置。 例如,它可能看起來像這樣:

QVBoxLayout *topLayout = new QVBoxLayout(); 

for (int lineNumber = 0; lineNumber < 1024; ++lineNumber) 
{ 
    QWidget *oneLineWidget = new QWidget(this); 
    QHBoxLayout *oneLineWidgetLayout = new QHBoxLayout(); 
    { //added these brackets just for the ease of reading. 
     QLabel *labFirst = new QLabel(tr("first label"), oneLineWidget); 
     QLabel *labSecond = new QLabel(tr("second label"), oneLineWidget); 
     QPushButton *bFirst = new QPushButton(tr("first button"), oneLineWidget); 
     QPushButton *bSecond = new QPushButton(tr("second button"), oneLineWidget); 
     QRadioButton *rbFirst = new QRadioButton(tr("first radiobutton"), oneLineWidget); 
     QRadioButton *rbSecond = new QRadioButton(tr("second radiobutton"), oneLineWidget); 

     oneLineWidgetLayout->addWidget(labFirst); 
     oneLineWidgetLayout->addWidget(labSecond); 
     oneLineWidgetLayout->addWidget(bFirst); 
     oneLineWidgetLayout->addWidget(bSecond); 

     //lets put one radioButton under another. 
     QVBoxLayout *radioButtonsLayout = new QVBoxLayout(); 
     { 
      radioButtonsLayout->addWidget(rbFirst); 
      radioButtonsLayout->addWidget(rbSecond); 
     } 
     //and now we can combine layouts. 
     oneLineWidgetLayout->addLayout(radioButtonsLayout); 

    } 
    oneLineWidget->setLayout(oneLineWidgetLayout); 

    topLayout->addWidget(oneLineWidget); 
} 

this->setLayout(topLayout); 

有不同類型的佈局(QBoxLayout,QGridLayout,QFormLayout,等等),你可以玩的。你可以從QLayout documentation開始。有一個繼承它的類的列表。 我希望它會有所幫助! :) 祝你好運!

+0

P.S.我把它寫在記事本中,並沒有在「現實生活中」進行測試。所以它可能包含一些錯誤。但至少我希望它能指引你朝着正確的方向前進。 – FreeNickname

0

你在Qt Designer中所做的所有事情最終都會轉化爲C++代碼創建對象並將它們鏈接到一起。

因此,將代碼(看看生成的頭文件)並將其放入for循環是非常簡單的。或者甚至可以自己重新開始,創建三個按鈕並將它們添加到佈局中只需幾行代碼即可。

相關問題