2010-08-30 2 views
0

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

#include <QtGui> 


class Mainwindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    Mainwindow(QMainWindow *parent = 0); 

public slots: 

private: 
    QScrollArea *List,*Sublist,*Overall,*Settings; 
    QLabel *label_title; 
    QPushButton *bn_exit,*bn_list,*bn_overall,*bn_settings; 
}; 

//! ------------------------------------- Mainlist ------------------------------------- 
class Sublist : public QWidget{ 
Q_OBJECT 
private: 
    QLabel *title; 
public: 
    Sublist(QWidget *parent = 0); 
}; 

и .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); 
} 
+0

Включает ли ваш файл в класс Mainwindow объявление для класса Sublist? –

+0

Да, они оба в одном заголовке – Alex

+0

Просто проверка. Эта проблема напрямую не связана с Qt. Есть что-то, чего вам не хватает, что невозможно определить исключительно из того, что вы здесь предоставили. У вас есть реализация для Sublist? –

ответ

1

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

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

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


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

class Sublist : public QWidget 


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

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


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


Подсписок класс может быть что-то вроде этого:

//.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); 
} 


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

+0

Вы были правы, имя класса и переменной были одинаковыми, это фиксировало проблема. Спасибо! – Alex

Смежные вопросы