私は苦労してきた次の問題があります。スクロール領域に配置されたツールボタンのリストがあります。ツールボタンのテキストを複製するプッシュボタンで2番目のスクロール領域を作成したいのですが、選択されたツールボタンのみです。たとえば、ツールボタン 1、2、および 3 を選択してみましょう。次に、「更新」ボタンを押すと、プッシュボタン 1、2、および 3 を含むスクロールエリアが表示されます。これは私のコードです:
CPP ファイル:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scrollArea.setParent(ui->centralWidget);
scrollArea.setGeometry(50,50,200,300);
scrollArea.setWidget(&viewport);
viewport.setLayout(&layout);
scrollArea2.setParent(ui->centralWidget);
scrollArea2.setGeometry(350,50,200,300);
scrollArea2.setWidget(&viewport2);
viewport2.setLayout(&layout2);
update.setParent(ui->centralWidget);
update.setGeometry(50,400,100,50);
update.setText("update");
addButtons();
connect(&update,SIGNAL(clicked()),this,SLOT(refreshScrollArea()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::addButtons()
{
for(int i=0; i<5;i++)
{
QToolButton *button = new QToolButton;
button->setCheckable(true);
buttons<<button;
buttons[i]->setText(QString::number(i+1));
buttons[i]->setMinimumSize(200,50);
layout.addWidget(buttons[i]);
}
viewport.resize(200,5*50);
}
void MainWindow::refreshScrollArea()
{
while (!layout2.isEmpty())
{
delete layout2.takeAt(0);
}
int selected_index=0;
for(int i=0; i<5;i++)
{
if (buttons[i]->isChecked())
{
QPushButton * button = new QPushButton;
button->setText(buttons[i]->text());
layout2.addWidget(button);
selected_index++;
}
}
viewport2.resize(150,50*selected_index);
}
ヘッダファイル:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtGui>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void addButtons();
void refreshScrollArea();
private:
Ui::MainWindow *ui;
QVector<QToolButton*> buttons;
QScrollArea scrollArea;
QScrollArea scrollArea2;
QVBoxLayout layout;
QVBoxLayout layout2;
QWidget viewport;
QWidget viewport2;
QPushButton update;
};
#endif // MAINWINDOW_H
主要:
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
更新ボタンを1回押すと完全に機能しますが、別のツールボタンを選択して更新を再度押すと、レイアウトが空ではないかのようにボタンが積み重なっているように見えます。ただし、ツールボタンを選択せずに更新を押すと、ボタンがないため、レイアウトが空になります。誰かが私が間違っていることを見ることができますか?