Russian Qt Forum
Сентябрь 30, 2024, 20:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Виджет внутри другого  (Прочитано 4603 раз)
agentcoba
Гость
« : Ноябрь 23, 2009, 02:41 »

У меня есть объект QLabel,  в нём есть гиперссылка... при нажатии она испускает сигнал void QLabel::linkActivated ( const QString & link ).. всё работает.. сигнал испускается..

Но мне нужно поместить этот QLabel внутрь QScrollArea..

То-есть пишу к примеру ui.scrollArea->setWidget( ui.label );  всё работает, скролинг появляется, но ссылка перестаёт испускать сигнал... все свойства что смог перепробовал настроить Грустный ... помогите пожалуйста...
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Ноябрь 23, 2009, 09:54 »

Это может происходить, если QScrollArea для каких-то целей отслеживает мышку (щелчки)
Записан

Юра.
mell
Гость
« Ответ #2 : Ноябрь 23, 2009, 10:56 »

возможно придется создать наследника QLabel и самому перехватывать эвенты, как в этом примере с QGraphicsView: http://www.prog.org.ru/index.php?topic=10828.msg66839#msg66839
Записан
agentcoba
Гость
« Ответ #3 : Ноябрь 23, 2009, 16:48 »

возможно придется создать наследника QLabel и самому перехватывать эвенты, как в этом примере с QGraphicsView: http://www.prog.org.ru/index.php?topic=10828.msg66839#msg66839
У меня не получилось...//  Компилится, но эффекта нету... (логику событий я не очень понимаю).

Я пытался использовать функцию void QWidget::grabMouse ().     После вызова ui.scrollArea->setWidget( ui.label ); пишу ui.label->grabMouse()
Из асистента:
>>Warning: Bugs in mouse-grabbing applications very often lock the terminal. Use this function with extreme caution, and consider using the -nograb command line option while debugging.  It is almost never necessary to grab the mouse when using Qt, as Qt grabs and releases it sensibly. In particular, Qt grabs the mouse when a mouse button is pressed and keeps it until the last button is released.

Короче баг действительно появляется...  при запуске всё капитально виснет,ctrl+alt+del жму - пишет критическую ошибку, жму пропустить... и тут... ВСЁ работает! сигнал испускается, но только почему-то два раза...

но так дело не пойдёт... думаю дальше Грустный
Записан
mell
Гость
« Ответ #4 : Ноябрь 23, 2009, 18:58 »

в данном коде сигнал испускается:
Код:
#include <QtGui> // qt 4.5

class MainWindow: public QMainWindow {
Q_OBJECT
public:
MainWindow() {
QLabel *label = new QLabel("<a href='localhost'>link</a><br><br><br><br><br><br><br><br><br><br><br><br>!!!!!");
QScrollArea *scroll = new QScrollArea;
scroll->setWidget(label);

connect(label, SIGNAL(linkActivated(QString)), SLOT(linkSlot(QString)));

this->setCentralWidget(scroll);
}

private slots:
void linkSlot(QString s) {
qDebug() << s;
}
};

int main(int argc, char **argv)
{
QApplication app(argc, argv);
MainWindow Window;
Window.show();
return app.exec();
}

#include "main.moc"
Записан
agentcoba
Гость
« Ответ #5 : Ноябрь 23, 2009, 21:17 »

в данном коде сигнал испускается:

испускается... но у меня ui.scroll объект, а не scroll...
this->setCentralWidget( ui.scroll  );    в этом случае выдаёт ошибку памяти.. ((

Вот конструктор главного например:
Код:
{
ui.setupUi(this);

QLabel *label = new QLabel("<a href='localhost'>link</a><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>!!!!!");

ui.scroll->setWidget(label);

connect(label, SIGNAL(linkActivated(QString)), SLOT( newCurrentItem(QString)) );

this->setCentralWidget( ui.scroll );    // Ошибка памяти
}
Записан
mell
Гость
« Ответ #6 : Ноябрь 23, 2009, 22:11 »

создал проект, на форму добавил QScrollArea и QLabel, такой код, сигнал испускает

Код:
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
ui->scrollArea->setWidget( ui->label );
ui->label->setText("<a href='localhost'>link</a>!!<br><br>!!<br><br><br><br><br>!!!!!");

connect(ui->label, SIGNAL(linkActivated(QString)), SLOT(linkSlot(QString)));

}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.063 секунд. Запросов: 22.