Автор Тема: QListWidget и QTextBrowser проблеми със свързването  (Прочетена 6186 пъти)

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Добър ден.

Много се извинявам че ви пиша, но имам проблем който вече 24 часа не мога да оправя.

Изчетох цялата документация на тези обекти, изчетох и документацията на сигналите, но пак не мога да се справя. Затова ви моля за помощ.

Създал съм два обекта:
QListWidget и QTextBrowser съответно с имена listWidget и textBrowser

Създал съм и item-и в QListBox:
Във for цикъл съм създал това да става:
Код
GeSHi (C++):
  1. for (i=0; i<15; i++) {
  2.        ui->listWidget->insertItem(i, QString(Name)+QString::number(i)); //изхода е - редове с имена Name1, Name2 ... до Name15
  3. }

Въпросът ми е как да свържа ListWidget-а с TextBrowser-а и кликайки върху някой ред да се извика item с номер (i) изпълни
Код
GeSHi (C++):
  1. ui->textBrowser->setText(QString::number(i))
т.е. от ListWidget-а кликайки на първия item да се изведе текст в текст браузера 1. Ако съм избрал Name15 да се изведе текст "15" - т.е. id-то на избрания item.

Надявам се, че сте ме разбрали. Ще се радвам ако ми помогнете.

Благодаря предварително!
Активен

eniac111

  • Напреднали
  • *****
  • Публикации: 263
  • Distribution: Debian / Ubuntu
  • Window Manager: Enlightenment DR16 / KDE4
    • Профил
    • WWW
На bash ще стане по- лесно
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Свържи сигнала void QListWidget::currentRowChanged ( int currentRow ) с твой слот, в който да се сетва текста на QTextBrowser ;)
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Това ли имаш впредвид?
Код
GeSHi (C++):
  1. connect(ui->listWidget, SIGNAL(currentRowChanged(currentRow)), this, SLOT(setText(int)));

С това ми дава грешка от рода:
Код
GeSHi (Bash):
  1. Starting /root/Projects/Qt4/Test/Test...
  2. Object::connect: No such signal QListWidget::currentRowChanged(currentRow)
  3. Object::connect:  (sender name:   'listWidget')
  4. Object::connect:  (receiver name: 'MainWindowClass')
  5. Object::connect: No such signal QListWidget::currentRowChanged(currentRow)
  6. Object::connect:  (sender name:   'listWidget')
  7. Object::connect:  (receiver name: 'MainWindowClass')

Интересно ми е как ще стане на bash... :)
Иначе - как би трябвало да го направя в Qt4?
Нещо не ми се връзва.
Активен

lkr

  • Напреднали
  • *****
  • Публикации: 81
    • Профил
Код
GeSHi (C++):
  1. #ifndef TB_H
  2. #define TB_H
  3.  
  4. #include <QWidget>
  5. #include <QListWidget>
  6. #include <QTextBrowser>
  7.  
  8. class QTextBrowser;
  9. class QListWidget;
  10.  
  11. class Myclass : public QWidget {
  12.    Q_OBJECT
  13. public:
  14.    Myclass(QWidget *parent = 0);
  15. public slots:
  16.    void itemClicked();
  17. private:
  18.    QListWidget *lw;
  19.    QListWidgetItem *item;
  20.    QTextBrowser *bw;
  21. };
  22.  
  23. #endif
  24.  

Код
GeSHi (C++):
  1. #include <QtGui>
  2. #include <tb.h>
  3.  
  4. Myclass::Myclass(QWidget *parent) : QWidget(parent) {
  5.    lw = new QListWidget;
  6.    item = new QListWidgetItem;
  7.    bw = new QTextBrowser;
  8.  
  9.  
  10.    connect(lw, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(itemClicked()));
  11.    item->setText(tr("blah"));
  12.  
  13.    lw->insertItem(0, item);
  14.    lw->show();
  15.    bw->show();
  16. }
  17.  
  18. void Myclass::itemClicked() {
  19.    bw->setText(item->text());
  20. }
  21.  
« Последна редакция: Apr 16, 2009, 22:20 от lkr »
Активен

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Благодаря за отговора, но по този начин, ми връща текста (в случая 'blah'), а аз искам да ми връща номера на записа...

Код
GeSHi (C++):
  1. for (i=0; i<15; i++) {
  2. ui->listWidget->insertItem(i, QString(Name)+QString::number(i)); //изхода е - редове с имена Name1, Name2 ... до Name15
  3. }

т.е. в случая трябва да върне "i" което се пада и номера на реда...

Разгледах пак функциите, но уви - удрям на камък.
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Свържи сигнала void QListWidget::currentRowChanged ( int currentRow ) със слот на ui с примерно име void setInt(int currentRow);

Примерен код:
Код:
void ui::setInt(int currentRow)
{
    if(currentRow != -1)
    {
         textBrowser->setText(QString(currentRow));
    }
    else
    {
         textBrowser->setText(QString());
    }
}
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Код
GeSHi (C++):
  1. connect(ui->listWidget, SIGNAL(currentRowChanged(int currentRow)), this, SLOT(setInt(int currentRow)));

Object::connect: No such signal QListWidget::currentRowChanged(int currentRow)
Object::connect:  (sender name:   'listWidget')
Object::connect:  (receiver name: 'MainWindowClass')
Object::connect: No such signal QListWidget::currentRowChanged(int currentRow)
Object::connect:  (sender name:   'listWidget')
Object::connect:  (receiver name: 'MainWindowClass')

Май няма да може да стане това... ;(
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Не пишеш правилно имената на фукциите в SLOT и SIGNAL макросите: http://doc.trolltech.com/4.5/signalsandslots.html

Код:
connect(ui->listWidget, SIGNAL(currentRowChanged(int)), this, SLOT(setInt(int)));
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Благодаря за отговора. Златен си!

Имам и още един, нядавам се последен въпрос:

Тъй като използвам QtCreator за създаване на Qt4 приложения, искам да свържа обикновен QPushButton с диалог, който обаче е изчертан в отделен  .ui файл. Та въпросът ми е, след като оправя сигналите, и слотовете, как точно да свържа едните cpp и хедъри с другите...

Давам пример:
Имам mainwindow.cpp, mainwindow.h, main.cpp mainwindow.ui
От QtCreator създавам UI клас, което ми създава допълнителни три файла:
dialog.cpp dialog.h dialog.ui

Та въпросът ми е как да ги свържа?

Благодаря предварително!
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Ако съм разбрал правилно: Искаш при натискане на бутона да се покаже диалога?

Това ще стане така:
0) инклудваш dialog.h в mainwindow.cpp
1) Създаваш си 1 слот на mainwindow примерно void buttonClicked()
2) свързваш слигнала clicked() на бутона към този слот.
3) Във buttonClicked() си създаваш един диалог и го показваш.

П.С Може и да им по лесен начин, ама вмомента ме мързи да мисля :( :D
« Последна редакция: Apr 17, 2009, 15:53 от task_struct »
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Ако съм разбрал правилно: Искаш при натискане на бутона да се покаже диалога?

Това ще стане така:
0) инклудваш dialog.h в mainwindow.cpp
1) Създаваш си 1 слот на mainwindow примерно void buttonClicked()
2) свързваш слигнала clicked() на бутона към този слот.
3) Във buttonClicked() си създаваш един диалог и го показваш.

П.С Може и да им по лесен начин, ама вмомента ме мързи да мисля :( :D
Въпросът ми е обаче - в трета точка - какво да напиша в слота buttonClicked() за да се покаже вече изчертания в dialog.ui диалог?

Благодаря предварително!
Активен

task_struct

  • Напреднали
  • *****
  • Публикации: 576
  • Distribution: Kubuntu 14.04
  • Window Manager: KDE 4.13
    • Профил
Създаваш си обек от типа на диалога и тъй като той е наследен от QDialog използваш неговите член функции: http://doc.trolltech.com/4.5/qdialog.html#exec
Активен

"Minds are like parachutes. They only function when they are open." - James Dewar

irc.freenode.net  / #linux-bg

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Създаваш си обек от типа на диалога и тъй като той е наследен от QDialog използваш неговите член функции: http://doc.trolltech.com/4.5/qdialog.html#exec
Така вече е по-друго...  :P

Благодаря ти човече, повече си от златен... Сигурно имаш повече от две висши по Qt4. Вярно е, че всичко е описано в страницата на TrollTech, обаче друго си е българската реч. Пък и аз само се нуждая от мааааалко напомняне и действам. :)

Благодаря ти много още веднъж! Да си жив и здрав!
Активен

LinuxFanUNIX

  • Напреднали
  • *****
  • Публикации: 408
  • Distribution: Slackware 12.2
  • Window Manager: KDE 3.5.10
    • Профил
Така. И за да не отварям нова тема, да питам тук.

В меню бара, в секция Help съм добавил License. Това ли трябва да добавя:
GNU.txt (прикачен файл)

И още нещо. Програмата е готова. Трябва ли преди да пусна сорса в h и cpp файловете, да се вписва нещо преди първото #include ... ?

Благодаря предварително!
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Right-Click меню в QListWidget
Общ форум
LinuxFanUNIX 3 3935 Последна публикация Sep 13, 2009, 20:56
от dvasilev
QCheckBox проблем в QListWidget - Проблем или липса на сигнал?
Общ форум
LinuxFanUNIX 5 3604 Последна публикация Jan 29, 2011, 21:17
от LinuxFanUNIX