Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Проецирование изображения


Автор: unixman 10.10.2006, 09:31
Есть некоторое диалоговое окно. В него выводится всякая информация. Причём информация вся в окно не помещается. Можно ли как то делать проецирование только части информации  в окно?

Автор: bsa 10.10.2006, 11:43
Какое API?

Автор: unixman 10.10.2006, 13:49
Всё пишется на QT
Если полностью то задача такова
Есть Диалоговое окно
В нём С помощью лайоутов создаётся  разветвлённая анкета. То есть получается лайоуты вложены в лайотуты.
Размер окна врезультате получается огромный(если большая анкета)
Хотелось бы сделать прокрутку, но стандартный скролл поддерживает тока элементы, унаследованные от QWidget, а от QLayout не поддерживает
Вот и приходится писать свою прокрутку, хочется её сделать более бустрой. Перерисовка окна занимает достаточно много времени

Автор: dmiceman 11.10.2006, 03:13
QScrollArea ?

Автор: unixman 11.10.2006, 08:48
QScrollArea вроде тока в 4 QT появился?
Я на 3 писал

Автор: powerfox 11.10.2006, 14:45
Не совсем понял суть проблемы.

Цитата(unixman @  10.10.2006,  14:49 Найти цитируемый пост)
Хотелось бы сделать прокрутку, но стандартный скролл поддерживает тока элементы, унаследованные от QWidget, а от QLayout не поддерживает

А родительское окно у тебя от чего наследует? QLayout - не виджет!!!

Автор: unixman 12.10.2006, 08:40
Родительское окно от QDialog. К нему скролл неудалось подключить. Пробовал. Пробовал Лайоут тоже в QWidget обернуть -- бесполезно

Автор: powerfox 12.10.2006, 19:55
Цитата(unixman @  12.10.2006,  09:40 Найти цитируемый пост)
Родительское окно от QDialog. К нему скролл неудалось подключить. Пробовал. Пробовал Лайоут тоже в QWidget обернуть -- бесполезно

Киньте ваш код: 2 дня буду занят, в субботу к вечеру прикручу.

Автор: unixman 13.10.2006, 08:46
Код

#include "createank.h"
#include <qlabel.h>
#include <qpushbutton.h>
#include <qlayout.h>
#include <qvariant.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
#include <qmessagebox.h>
#include <qregexp.h>
#include <qlineedit.h>
#include <qvbuttongroup.h>
#include <qhbuttongroup.h>
#include <qradiobutton.h>
#include <qcheckbox.h>
#include <qobjectlist.h>
#include <qvbox.h>
#include <qscrollview.h>
#include <stdio.h>
#include <qcombobox.h>
#include "MainWidget.h"


extern  int IdAnk;
void CreateAnk::dro(char *table,int index,QGridLayout *parent,int *x, int *y, int main_y,QWidget *qo)
{
    QString elem_child;
    MySQLConnect connect;
    char mas[1000];
    char name[100];
    if(TypeOperation==1 || TypeOperation==2)
        sprintf(mas,"select * from %s where id_conteyner = %d",table,index);
    if(TypeOperation==3)
        sprintf(mas,"select id_conteyner,name,cols,rows,child,type,typeank,close_table,open_table,tr,message from %s where id_conteyner = %d and id = %d",table,index,AnkType);
    
    connect.query(mas);
    connect.next_row();
    connect.row_index(mas,8);
    int open_table = atoi(mas);
    int count_cols;
    connect.row_index(mas,2);
    count_cols = atoi(mas);
    count_cols = count_cols==0?1:count_cols;
    int count_rows;
    connect.row_index(mas,3);
    count_rows = atoi(mas);
    count_rows = count_rows==0?1:count_rows;

    QGridLayout *Layout;
    if(open_table==1)
    {

        Layout = new QGridLayout(qo,count_cols,count_rows,5,5);
        parent->addLayout((QLayout*)Layout,*y,*x);
        *x=0;*y=0;
        parent=Layout;
    }
    //выделим первый номер из списка дочерних
    connect.row_index(mas,4);
    QString child=mas;
    int zap_poz = child.find(",");
    if(zap_poz==-1) 
    {
        elem_child=child.left(zap_poz);
        child="";
    }
    else
    {
        elem_child=child.left(zap_poz);
        child = child.right(child.length()-zap_poz-1);
    }
    if(child.isEmpty())
    {//выводим элементы
        
        int answer;
        //получаем ответ
        if(TypeOperation==2)
        {
            MySQLConnect  temp_connect;
            

            sprintf(mas,"select * from answer where id_cont = %s and id_org=%d and typeank= %d",elem_child.ascii(),AnkOrg,AnkType);
            temp_connect.query(mas);
            if(temp_connect.count()>0)
            {
                temp_connect.next_row();
                temp_connect.row_index(mas,2);
                answer = atoi(mas);
            }
            else
            {
                answer = 0;
            }
        }
        
        
        connect.row_index(mas,5);
        int type = atoi(mas);
        if(type==2)
        {

            QLineEdit *le = new QLineEdit(qo,elem_child);
            if(TypeOperation==2)
            {
                sprintf(mas,"%d",answer);
                le->setText(mas);
            }
            parent->addWidget(le,*y,*x);
            if(main_y>=poz && main_y<(poz+COUNT_VIEW))
            {
                le->show();
            }
            else
            {
                le->hide();
            }
        }
        
        if(type==30)//горизонталные радиобатаны
        {
            //тут будут группироваться переключатели
            QHButtonGroup *hgr  = new QHButtonGroup("Chouse",qo);
            connect.row_index(mas,2);
            int count_radio = atoi(mas);
            for(int i=0;i<count_radio;i++)
            {
                
                    MySQLConnect  temp_connect;
                    connect.row_index(mas,10);//message
                    QString temp = mas;
            
                    QStringList list = QStringList::split(",",temp);


                    int name_index = atoi(mas);
                    char mas_temp[1000];
                    sprintf(mas_temp,"select message from message where id = %s",list[i].ascii());
                    temp_connect.query("set Names cp1251;");
                    temp_connect.query(mas_temp);
                    temp_connect.next_row();
                    temp_connect.row_index(mas,0);

            

                    sprintf(name,"%s_%d",elem_child.ascii(),i);
                    QRadioButton *qr = new QRadioButton(QString::fromLocal8Bit(mas),hgr,name);
                    if(i==answer) qr->setChecked(TRUE);
                
                
            }
            parent->addWidget(hgr,*y,*x);            
            if(main_y>=poz && main_y<poz+COUNT_VIEW)
            {
                hgr->show();
            }
            else
            {
                hgr->hide();
            }
            //QObject::connect(hgr,SIGNAL(clicked),this,SLOT(RadioClicked(int)));
        }
        
        if(type==4 || type==3)//вертикльные радиобатаны
        {
            //тут будут группироваться переключатели
            QButtonGroup *hgr;
            if(type==4)
            hgr  = new QVButtonGroup("Chouse",qo);
            if(type==3)
            hgr  = new QHButtonGroup("Chouse",qo);
            connect.row_index(mas,2);
            int count_radio = atoi(mas);

            for(int i=0;i<count_radio;i++)
            {
                if(TypeOperation==1 || TypeOperation==2)//заполняем анкету или просмотр
                {
                    MySQLConnect  temp_connect;
                    connect.row_index(mas,10);//message
                    QString temp = mas;
            
                    QStringList list = QStringList::split(",",temp);


                    int name_index = atoi(mas);
                    char mas_temp[1000];
                    sprintf(mas_temp,"select message from message where id = %s",list[i].ascii());
                    temp_connect.query("set Names cp1251;");
                    temp_connect.query(mas_temp);
                    temp_connect.next_row();
                    temp_connect.row_index(mas,0);

                    sprintf(name,"%s_%d",elem_child.ascii(),i);
                    QRadioButton *qr=new QRadioButton(QString::fromLocal8Bit(mas),hgr,name);
                    if(i==answer) qr->setChecked(TRUE);
                }
                if(TypeOperation==3)
                {
                    sprintf(name,"%s_%d_t",elem_child.ascii(),i);
                    QLineEdit *le = new QLineEdit(hgr,name);
                    sprintf(name,"%s_%d",elem_child.ascii(),i);
                    QRadioButton *qr=new QRadioButton("123",hgr,name);

                }
            }

            //выведем свои варианты ответа
            if(TypeOperation==1 || TypeOperation==2)
            {
                connect.row_index(mas,12); //my_count
                for(int j=i;j<i+atoi(mas);j++)
                {
                    sprintf(name,"%s_%d_t",elem_child.ascii(),j);
                
                    QLineEdit *le = new QLineEdit(hgr,name);
                    if(TypeOperation==2)
                    {
                        MySQLConnect  ttemp_connect;
                        int name_index = atoi(elem_child);
                        char mas_temp[1000];
                        sprintf(mas_temp,"select value from answer_message where id_cont = %d and id_org=%d and typeank= %d",name_index,AnkOrg,AnkType);
                        ttemp_connect.query("set Names cp1251;");
                        ttemp_connect.query(mas_temp);
                        ttemp_connect.next_row();
                        ttemp_connect.row_index(mas_temp,0);
                        le->setText(mas_temp);
                    }

                    sprintf(name,"%s_%d",elem_child.ascii(),j);
                    QRadioButton *qr=new QRadioButton("123",hgr,name);
                    if(j==answer) qr->setChecked(TRUE);

                }
            }
            parent->addWidget(hgr,*y,*x);
            
            if(main_y>=poz && main_y<poz+COUNT_VIEW)
            {
                hgr->show();
            }
            else
            {
                hgr->hide();
            }            
            //QObject::connect(hgr,SIGNAL(clicked),this,SLOT(RadioClicked(int)));
        }
        if(type==6)//просто текст
        {
            QLabel *lbl = new QLabel(elem_child,qo,elem_child);
            parent->addWidget(lbl,*y,*x);
            if(main_y>=poz && main_y<poz+COUNT_VIEW)
            {
                lbl->show();
            }
            else
            {
                lbl->hide();
            }
        }

        if(type==5)//чекбоксы
        {
            if(TypeOperation==1 || TypeOperation==2)
                connect.row_index(mas,13);
            if(TypeOperation==3) strcpy(mas,"1");
            if(atoi(mas)==1)
            {
                QHButtonGroup *hgr  = new QHButtonGroup("",qo);
                sprintf(name,"%s_t",elem_child.ascii());
                QLineEdit *le = new QLineEdit(hgr,name);
                
                if(TypeOperation==2)
                {
                    MySQLConnect  temp_connect;
                    int name_index = atoi(elem_child);
                    char mas_temp[1000];
                    sprintf(mas_temp,"select value from answer_message where id_cont = %d and id_org=%d and typeank= %d",name_index,AnkOrg,AnkType);
                    temp_connect.query("set Names cp1251;");
                    temp_connect.query(mas_temp);
                    temp_connect.next_row();
                    temp_connect.row_index(mas,0);

                    le->setText(mas);
                }
                
                sprintf(name,"%s",elem_child.ascii());
                QCheckBox *chb = new QCheckBox("",hgr,name);
                if(answer) chb->setChecked(TRUE);
                parent->addWidget(hgr,*y,*x);
                if(main_y>=poz && main_y<poz+COUNT_VIEW)
                {
                    hgr->show();
                }
                else
                {
                    hgr->hide();
                }
            }
            else
            {
                MySQLConnect  temp_connect;
                connect.row_index(mas,10);//message
                int name_index = atoi(mas);
                char mas_temp[1000];
                sprintf(mas_temp,"select message from message where id = %d",name_index);
                temp_connect.query("set Names cp1251;");
                temp_connect.query(mas_temp);
                temp_connect.next_row();
                temp_connect.row_index(mas,0);
                
                QCheckBox *chb = new QCheckBox(QString::fromLocal8Bit(mas),qo,elem_child);
                if(answer) chb->setChecked(TRUE);
                parent->addWidget(chb,*y,*x);
                if(main_y>=poz && main_y<poz+COUNT_VIEW)
                {
                    chb->show();
                }
                else
                {
                    chb->hide();
                }
            }

        }

        if(type==8)
        {
            QLineEdit *le = new QLineEdit(qo,elem_child);
            parent->addWidget(le,*y,*x);
            if(main_y>=poz && main_y<poz+COUNT_VIEW)
            {
                le->show();
            }
            else
            {
                le->hide();
            }
        }
            (*x)++;
            elem_child="";
    }

    while(!elem_child.isEmpty())
    {
        dro(table,elem_child.toInt(),Layout,x,y,main_y,qo);
        zap_poz = child.find(",");
        elem_child=child.left(zap_poz);
        child = child.right(child.length()-zap_poz-1);
        if(child=="0") child="";
        
    }

    connect.row_index(mas,9);
    int tr = atoi(mas);
    if(tr == 1)
    {
        (*y)++;
        (*x)=0;
    }




}

CreateAnk::CreateAnk(char *_table,int Org,int type, int typeank,int _count_view,int _poz, QWidget* parent,  const char* name, bool modal, WFlags fl )
    : QDialog( parent, name, modal, fl )
{
    AnkType=typeank;
    COUNT_VIEW = _count_view;
    TypeOperation = type;
    poz=_poz;
    AnkOrg=Org;
    strcpy(table,_table);
    if ( !name )
    setName( "CreateAnk" );
    setGeometry(5,5,100,100);
    //resize( 515, 285 ); 

    //setMinimumSize( 200, 120 );
    //setMaximumSize( 200, 120 );
    setFixedSize(600,600);
    setProperty( "caption", tr( "CreateAnk" ) );
    setProperty( "sizeGripEnabled", QVariant( TRUE, 0 ) );


    
    DrawAnk();
    
    // signals and slots connections
}

/*  
 *  Destroys the object and frees any allocated resources
 */
CreateAnk::~CreateAnk()
{
    // no need to delete child widgets, Qt does it all for us
}


void CreateAnk::DrawAnk()
{
    MySQLConnect *connect = new MySQLConnect;
    connect->query("set Names cp1251;");
    //получаем вопросы, относящиеся к данному типу анкеты
    char mas[1000];
    char mas_name[100];
    int index=AnkType;
    if(TypeOperation==1 || TypeOperation==2)//это случай просмотра и создания анкеты. необходимо выбирать номера вопросов
    {
        sprintf(mas,"select * from typeank_in where id=%d ;",index);//формируем запрос
        connect->query(mas);
        if(connect->error==1) QMessageBox::about(this,"Error","can not select question for anket");

        connect->next_row();
        connect->row_index(mas,1);
        QString str = mas;
        QStringList list = QStringList::split(",",str);
        str  = "select * from cont where id_conteyner in (";
        for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) 
        {
            str.append(*it);
            str.append(",");
        }

        str.remove(str.length()-1,1);

        str.append(") order by number");

        connect->query(str.ascii());
    }
    if(TypeOperation==3)
    {
        sprintf(mas,"select id_conteyner,name from template where id = %d ",AnkType);
        connect->query(mas);
    }
        if(connect->error==1) QMessageBox::about(this,"Error","can not select question");
        x=0; y =0;
    
    
        CountQuestion = connect->count();

    x=0; y =0;
    MainLayout = new QGridLayout(this,connect->count(),2,0,0);//создаётся главный лайоут, в него в функции dro напихивается ещё куча таких. ВОт его и нужно прикрутить к прокрутке
    MainLayout->setResizeMode(QLayout::Minimum);
    //MainLayout->setResizeMode(QLayout::Minimum);
    //poz =;
    int main_y=0;

    while (connect->next_row()) 
    {
        //вывели название вопроса
        connect->row_index(mas,1);
        if(TypeOperation == 1 || TypeOperation==2)
        {
            sprintf(mas_name,"%d_l",main_y);
            QLabel *lbl = new QLabel(QString::fromLocal8Bit(mas),this,mas_name);
            if(main_y>=poz && main_y<poz+COUNT_VIEW)
            {
                lbl->show();
            }
            else
            {
                lbl->hide();
            }
            MainLayout->addWidget(lbl,main_y,x);
        }
        if(TypeOperation == 3)
        {
            MainEdit = new QLineEdit(this,"MainEdit");
            if(main_y>=poz && main_y<poz+COUNT_VIEW)
            {
                MainEdit->show();
            }
            else
            {
                MainEdit->hide();
            }
            MainLayout->addWidget(MainEdit,main_y,x);
        }



        x++;
        //определим индекс вопроса
        connect->row_index(mas,0);
        int index;
        index = atoi(mas);
        y=main_y;
        dro(table,index,MainLayout,&x,&y,main_y,this);
        x=0;
        main_y++;

    }

//QMessageBox::about(this,"Error",str);
    save = new QPushButton("Save",this);    
    MainLayout->addWidget(save,main_y,0);

    QGridLayout *Layout;
    Layout = new QGridLayout(this,1,2,5,5);

    
    next = new QPushButton("Next",this);    
    pred = new QPushButton("Pred",this);
    Layout->addWidget(pred,0,0);
    Layout->addWidget(next,0,1);
    

    MainLayout->addLayout((QLayout*)Layout,main_y,1);


    QObject::connect(save,SIGNAL(clicked()),this,SLOT(Save()));
    QObject::connect(next,SIGNAL(clicked()),this,SLOT(NextSlot()));
    QObject::connect(pred,SIGNAL(clicked()),this,SLOT(PredSlot()));

    if(TypeOperation == 1)
    {
        sprintf(mas,"insert into ank values(%d,%d,'2006-10-06');",AnkOrg, AnkType);
        connect->query(mas);
    }

}

Суть кода такова. Имеется Лайоут, в него помещается много виджетов. Для форматирования эти же виджеты помещаются в лайоуты. И вот всё это дело надо прокрутить.

Пока я сделал так. Я вывожу всё что есть, а потом hide делаю для тех элементов, которые не влазят . Потом при прокрутке увеличиваю текущую позицию, показываю предыдущие элементы и прячу опять не нужные. Программа при этом тормозит конкретно, окно перерисовывается дай боже.
Весь код выложить не могу. Он очень большой.
Просто вообще было бы интересно узнать, как сделать прокрутку Layout. В нете ничё не нашёл на эту тему. Вопрос такой ставили куча людей, а ответа на него не нашёл.
Пишется всё на Qt3.

Спасибо за поддержку.

Автор: powerfox 14.10.2006, 17:33
Код пока не смотрел, вот как надо делать прокрутку для QLayout: лпределяем виджет (наследник QWidget или QMainWindow), там определяем все кнопки, в конструкторе компануем эти кнопки, как нам надо. В ф-ии main (или где нам удобо это сделать) определяем QScrollView, делаем его главным виджетом, а наш - дочерним виджету QScrollView. В документации есть много всего по QScrollView.
Вот пример программки.

main.cpp:
Код

#include <qapplication.h>
#include <qscrollview.h>
#include "finddialog.h"

int main(int argc,char *argv[])
{
 QApplication app(argc,argv);
 QScrollView scrollview;
 scrollview.setCaption(QObject::tr("Scroll this window"));
 app.setMainWidget(&scrollview);
 FindDialog *dialog = new FindDialog;
 scrollview.addChild(dialog);
 scrollview.show();
 return app.exec();
}


finddialog.h:
Код

#ifndef FINDDIALOG_H
#define FINDDIALOG_H
#include <qdialog.h>
class QCheckBox;
class QLabel;
class QLineEdit;
class QPushButton;

class FindDialog : public QDialog
{
    Q_OBJECT
public:
    FindDialog(QWidget *parent = 0, const char* name = 0);
signals:
    void findNext(const QString &str, bool caseSensitive);
    void findPrev(const QString &str, bool caseSensitive);
private slots:
    void findClicked();
    void enableFindButton(const QString &text);
private:
    QLabel *label;
    QLineEdit *lineEdit;
    QCheckBox *caseCheckBox;
    QCheckBox *backwardCheckBox;
    QPushButton *findButton;
    QPushButton *closeButton;

    QLabel *label2;
    QLineEdit *lineEdit2;
    QCheckBox *caseCheckBox2;
    QCheckBox *backwardCheckBox2;
    QPushButton *findButton2;
    QPushButton *closeButton2;

    QLabel *label3;
    QLineEdit *lineEdit3;
    QCheckBox *caseCheckBox3;
    QCheckBox *backwardCheckBox3;
    QPushButton *findButton3;
    QPushButton *closeButton3;

    QLabel *label4;
    QLineEdit *lineEdit4;
    QCheckBox *caseCheckBox4;
    QCheckBox *backwardCheckBox4;
    QPushButton *findButton4;
    QPushButton *closeButton4;
};
#endif



finddialog.cpp
Код

#include <qcheckbox.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qlineedit.h>
#include <qpushbutton.h>
#include "finddialog.h"


FindDialog::FindDialog(QWidget *parent,const char *name)
    :QDialog(parent,name)
{
 setCaption(tr("Find"));
 label = new QLabel(tr("Find &what"),this);
 lineEdit= new QLineEdit(this);
 label->setBuddy(lineEdit);
 caseCheckBox = new QCheckBox(tr("Match &case"),this);
 backwardCheckBox = new QCheckBox(tr("Search &backward"),this);
 findButton = new QPushButton(tr("Search &backward"), this);
 findButton->setDefault(true);
 findButton->setEnabled(false);
 closeButton = new QPushButton(tr("Close"),this);

 label2 = new QLabel(tr("Find &what"),this);
 lineEdit2= new QLineEdit(this);
 label2->setBuddy(lineEdit);
 caseCheckBox2 = new QCheckBox(tr("Match &case"),this);
 backwardCheckBox2 = new QCheckBox(tr("Search &backward"),this);
 findButton2 = new QPushButton(tr("Search &backward"), this);
 findButton2->setDefault(true);
 findButton2->setEnabled(false);
 closeButton2 = new QPushButton(tr("Close"),this);

 label3 = new QLabel(tr("Find &what"),this);
 lineEdit3= new QLineEdit(this);
 label3->setBuddy(lineEdit);
 caseCheckBox3 = new QCheckBox(tr("Match &case"),this);
 backwardCheckBox3 = new QCheckBox(tr("Search &backward"),this);
 findButton3 = new QPushButton(tr("Search &backward"), this);
 findButton3->setDefault(true);
 findButton3->setEnabled(false);
 closeButton3 = new QPushButton(tr("Close"),this);

 label4 = new QLabel(tr("Find &what"),this);
 lineEdit4= new QLineEdit(this);
 label4->setBuddy(lineEdit);
 caseCheckBox4 = new QCheckBox(tr("Match &case"),this);
 backwardCheckBox4 = new QCheckBox(tr("Search &backward"),this);
 findButton4 = new QPushButton(tr("Search &backward"), this);
 findButton4->setDefault(true);
 findButton4->setEnabled(false);
 closeButton4 = new QPushButton(tr("Close"),this);
 
 connect(lineEdit, SIGNAL(textChanged(const QString &)), 
         this, SLOT(enableFindButton(const QString &)));
 connect(findButton, SIGNAL(clicked()),
          this, SLOT(findClicked()));
 connect(closeButton, SIGNAL(clicked()),
      this, SLOT(close()));


 //1
 QHBoxLayout *topLeftLayout = new QHBoxLayout;
 topLeftLayout->addWidget(label);
 topLeftLayout->addWidget(lineEdit);
 
 QVBoxLayout *leftLayout = new QVBoxLayout;
 leftLayout->addLayout(topLeftLayout);
 leftLayout->addWidget(caseCheckBox);
 leftLayout->addWidget(backwardCheckBox);
 
 QVBoxLayout *rightLayout = new QVBoxLayout;
 rightLayout->addWidget(findButton);
 rightLayout->addWidget(closeButton);
 rightLayout->addStretch(1);
 
 QHBoxLayout *mainLayout1 = new QHBoxLayout;
 mainLayout1->setMargin(11);
 mainLayout1->addLayout(leftLayout);
 mainLayout1->addLayout(rightLayout);


 //2
 QHBoxLayout *topLeftLayout2 = new QHBoxLayout;
 topLeftLayout2->addWidget(label2);
 topLeftLayout2->addWidget(lineEdit2);
 
 QVBoxLayout *leftLayout2 = new QVBoxLayout;
 leftLayout2->addLayout(topLeftLayout2);
 leftLayout2->addWidget(caseCheckBox2);
 leftLayout2->addWidget(backwardCheckBox2);
 
 QVBoxLayout *rightLayout2 = new QVBoxLayout;
 rightLayout2->addWidget(findButton2);
 rightLayout2->addWidget(closeButton2);
 rightLayout2->addStretch(1);
 
 QHBoxLayout *mainLayout2 = new QHBoxLayout;
 mainLayout2->setMargin(11);
 mainLayout2->addLayout(leftLayout2);
 mainLayout2->addLayout(rightLayout2);


 //3
 QHBoxLayout *topLeftLayout3 = new QHBoxLayout;
 topLeftLayout3->addWidget(label3);
 topLeftLayout3->addWidget(lineEdit3);
 
 QVBoxLayout *leftLayout3 = new QVBoxLayout;
 leftLayout3->addLayout(topLeftLayout3);
 leftLayout3->addWidget(caseCheckBox3);
 leftLayout3->addWidget(backwardCheckBox3);
 
 QVBoxLayout *rightLayout3 = new QVBoxLayout;
 rightLayout3->addWidget(findButton3);
 rightLayout3->addWidget(closeButton3);
 rightLayout3->addStretch(1);
 
 QHBoxLayout *mainLayout3 = new QHBoxLayout;
 mainLayout3->setMargin(11);
 mainLayout3->addLayout(leftLayout3);
 mainLayout3->addLayout(rightLayout3);

 
 //4
 QHBoxLayout *topLeftLayout4 = new QHBoxLayout;
 topLeftLayout4->addWidget(label4);
 topLeftLayout4->addWidget(lineEdit4);
 
 QVBoxLayout *leftLayout4 = new QVBoxLayout;
 leftLayout3->addLayout(topLeftLayout4);
 leftLayout3->addWidget(caseCheckBox4);
 leftLayout3->addWidget(backwardCheckBox4);

 QVBoxLayout *rightLayout4 = new QVBoxLayout;
 rightLayout4->addWidget(findButton4);
 rightLayout4->addWidget(closeButton4);
 rightLayout4->addStretch(1);

 QHBoxLayout *mainLayout4 = new QHBoxLayout;
 mainLayout4->setMargin(11);
 mainLayout4->addLayout(leftLayout4);
 mainLayout4->addLayout(rightLayout4);

 QVBoxLayout *mainLayout = new QVBoxLayout(this);
 mainLayout->setMargin(11);
 mainLayout->addLayout(mainLayout1);
 mainLayout->addLayout(mainLayout2);
 mainLayout->addLayout(mainLayout3);
 mainLayout->addLayout(mainLayout4);


}

void FindDialog::findClicked()
{
 QString text = lineEdit->text();
 bool caseSensitive = caseCheckBox->isOn();
 if(backwardCheckBox->isOn())    
    emit findPrev(text, caseSensitive);
  else
    emit findNext(text, caseSensitive);
}

void FindDialog::enableFindButton(const QString &text)
{
    findButton->setEnabled(!text.isEmpty());
}


В принципе, всё довольно прозрачно.

Автор: unixman 16.10.2006, 09:14
Попробовал так и сделать. Создал класс диалог, в нём все элементы и содержатся. Создал QScrollView и у него в качестве дочернего впихнул этот класс. Диалог не создался(((( То есть когда вызываю exec диалог не запускается.

Автор: powerfox 16.10.2006, 18:19
Можно весь код? Желательно не листинг, а в архиве.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)