Создайте виджет в QMainWindow и загрузите в ScrollArea - PullRequest
0 голосов
/ 30 августа 2010

Я попытался создать главное окно со слотом, которое создает виджет и загружает его в ScrollArea в главном окне.Это не работает, поэтому я устал создавать виджет в конструкторе главного окна, и я всегда получаю ошибки и не знаю почему .. так, как правильно объявить виджет?и .cpp

Mainwindow::Mainwindow(QMainWindow *parent) : QMainWindow(parent) {

    this->resize(1024,576);
    //this->setWindowFlags(Qt::Popup);
    QPalette palette;
    palette.setColor(QPalette::Background, QColor(16,16,16));
    this->setPalette(palette);

    Sublist SecondList;

    //! [Set ScrollAreas]
    List = new QScrollArea(this);
    List->setGeometry(0,60,200,456);
    List->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

    Sublist = new QScrollArea(this);
    Sublist->setGeometry(200,60,824,456);
    Sublist->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    //Sublist->setWidget(SecondList)

}

//! ---------------------------------------- MainList------------------------------------------------------
Sublist::Sublist(QWidget *parent){
    resize(1200,1200);
    title = new QLabel("Title",this);
    title->setGeometry(1120,1120,40,90);
}

1 Ответ

1 голос
/ 31 августа 2010

Я немного поиграл с вашим кодом, заметил несколько вещей:

В классе Главное окно вы определяете QScrollArea переменные:

QScrollArea *List,*Sublist,*Overall,*Settings;


Вы определяете переменную с именем Подсписок типа QScrollArea , но у вас также есть класс такой же имя:

class Sublist : public QWidget


Вероятно, было бы неплохо изменить имена переменных для областей прокрутки:

QScrollArea *list, *subList, *overall, *settings;


Далее в конструкторе для класса Подсписок вы передаете указатель на родительский класс, но никогда не назначаете его своему базовому классу. У вас также есть виджет QLabel, который никогда нигде не размещается. Кажется, что вам нужен макет для вашего пользовательского виджета.


Класс Sublist может выглядеть примерно так:

//.h
class Sublist : public QWidget
{
    Q_OBJECT

public:
    Sublist(QWidget *parent = 0);

private:
    QLabel *title;
    QVBoxLayout *layout;
};

//.cpp
Sublist::Sublist(QWidget *parent) : QWidget(parent) {
    resize(1200,1200);
    title = new QLabel("Title");
    title->setGeometry(1120,1120,40,90);

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(title);
    setLayout(layout);
}


Класс Mainwindow примерно такой:

//.h
class Mainwindow : public QMainWindow
{
    Q_OBJECT

public:
    Mainwindow(QMainWindow *parent = 0);

private:
    Sublist *secondList;
    QScrollArea *list, *subList, *overall, *settings;
    QLabel *label_title;
    QPushButton *bn_exit,*bn_list,*bn_overall,*bn_settings;
};

//.cpp
Mainwindow::Mainwindow(QMainWindow *parent) : QMainWindow(parent) 
{
    this->resize(1024,576);
    QPalette palette;
    palette.setColor(QPalette::Background, QColor(16,16,16));
    palette.setColor(QPalette::Foreground, QColor(255,255,255));//set text to white
    this->setPalette(palette);

    secondList = new Sublist(this);

    //! [Set ScrollAreas]
    list = new QScrollArea(this);
    list->setGeometry(0,60,200,456);
    list->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);

    subList = new QScrollArea(this);
    subList->setGeometry(200,60,824,456);
    subList->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
    subList->setWidget(secondList);
}


Я все еще не на 100% уверен, что именно этого вы и пытаетесь достичь с помощью этого кода, но я надеюсь, что помог вам решить некоторые проблемы в вашей текущей реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...