Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
3 / 3 / 4
Регистрация: 18.11.2013
Сообщений: 172

Вывод в QListWidget

19.03.2016, 14:50. Показов 4944. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два заголовчных файла:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QDialog>
#include <QWidget>
 
#include <QVBoxLayout>
#include <QListWidget>
 
#include <QPushButton>
 
class MainWindow : public QDialog
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent=0);
private:
    QVBoxLayout *layout;
 
    QListWidget *list;
 
    QPushButton *close;
public:
    void test();
};
 
 
#endif // MAINWINDOW_H
и

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 #ifndef TESTCLASS_H
#define TESTCLASS_H
 
#include "mainwindow.h"
 
#include <QObject>
 
#include <QDebug>
 
class TestClass : public QObject
{
    Q_OBJECT
public:
    TestClass(int);
private:
    int num;
public slots:
    void run();
    void run2();
 
signals:
    void finished();
};
 
#endif // TESTCLASS_H
И три исходника, один из них main:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "mainwindow.h"
 
#include "testclass.h"
 
#include <QDebug>
 
MainWindow::MainWindow(QWidget *parent) : QDialog(parent)
{
    list = new QListWidget;
 
    close = new QPushButton("Close");
 
    layout = new QVBoxLayout;
    layout->addWidget(list);
    layout->addWidget(close);
 
    setLayout(layout);
 
    connect(close, SIGNAL(clicked()), this, SLOT(close()));
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "testclass.h"
 
TestClass::TestClass(int i)
{
    num=i;
}
 
void TestClass::run() {
 
    for(int i = 0; i < 10; ++i)
    {
        qDebug()<<"Ага: "<<num;
    }
    emit finished();
}
 
void TestClass::run2() {
    for(int i = 0; i < 10; ++i)
    {
        qDebug()<<"Вот: "<<num;
    }
    emit finished();
}
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "mainwindow.h"
#include <QApplication>
 
 
#include <QThread>
#include "testclass.h"
 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
 
    QThread thread1;
    QThread thread2;
 
    TestClass text1(10);
    TestClass text2(20);
 
    QObject::connect(&thread1, SIGNAL(started()), &text1, SLOT(run()));
    QObject::connect(&text1, SIGNAL(finished()), &thread1, SLOT(terminate()));
 
    QObject::connect(&thread2, SIGNAL(started()), &text2, SLOT(run2()));
    QObject::connect(&text2, SIGNAL(finished()), &thread2, SLOT(terminate()));
 
    text1.moveToThread(&thread1);
    text2.moveToThread(&thread2);
 
    thread1.start();
    thread2.start();
 
    MainWindow *window = new MainWindow;
    window->show();
 
    return a.exec();
}
Вообще задача создать многопоточное приложение. И так как я первый день в Qt да и C++ знаю на уровне ХЕЛЛОУ ВОРЛД, вроде как релизовал это, но забавно то, что я смог вывести на экран два потока только в консоль (qDebug - если я верно понял), но я хочу чтобы один поток выводился в коносль, а второй на QListWidget.
Помогите новичку
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.03.2016, 14:50
Ответы с готовыми решениями:

Вывод строки из файла в QListWidget
Программирую программку, не скажу что прям асс в програмировании . Столкнулся с проблемой . Есть файл (txt) , из не го нужно вывести строки...

QListWidget
помогите написать лист который будет состоять из строк который пользователь ввел с QLineEdit и лист динамически изменяется

QListWidget
#include &lt;QtGui&gt; int main(int argc, char *argv) { QApplication a(argc, argv); QPushButton *but=new QPushButton;...

4
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
19.03.2016, 16:27
Вставить в QListWidget - void QListWidget::addItem(const QString &label). Точно так-же как ты выводишь в дебаг. Только надо помнить, что обращаться к QListWidget-у можно только из класса MainWindow, в котором он и описан. Соответственно, если нужно что-то записать из другого потока, или просто из другого класса - необходимо реализовать сигнал-слотовое соединение, которое будет добавлять строчки в QListWidget. В смысле: в потоке - сигнал, в MainWindow - слот, ловящий сигнал и добавляющий строку.
1
3 / 3 / 4
Регистрация: 18.11.2013
Сообщений: 172
19.03.2016, 20:07  [ТС]
Цитата Сообщение от Amok Посмотреть сообщение
Вставить в QListWidget - void QListWidget::addItem(const QString &label). Точно так-же как ты выводишь в дебаг. Только надо помнить, что обращаться к QListWidget-у можно только из класса MainWindow, в котором он и описан. Соответственно, если нужно что-то записать из другого потока, или просто из другого класса - необходимо реализовать сигнал-слотовое соединение, которое будет добавлять строчки в QListWidget. В смысле: в потоке - сигнал, в MainWindow - слот, ловящий сигнал и добавляющий строку.
Извините, можете "показать", а то, как вы сказали, у меня не выходит, может я не так понял. Не получается въехать пока что В теории все понятно, а вот у меня практика хромает

Добавлено через 2 часа 59 минут
Цитата Сообщение от b00006 Посмотреть сообщение
Извините, можете "показать", а то, как вы сказали, у меня не выходит, может я не так понял. Не получается въехать пока что В теории все понятно, а вот у меня практика хромает
Проблему решил созданием еще одного класса. Точно также, как и TestClass, только вместо QDebag, сделал QFile. Но всё-равно не откажусь в ваших решениях, если вам не сложно
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
19.03.2016, 20:08
b00006, Не очень понял суть задачи, там у вас много всего понаписано, а разбираться в деталях - в лом. Тем более, еще и потоки...
Но попробуйте посмотреть в сторону метода qInstallMsgHandler();
Он назначает для qDebug() другую функцию, в которой вы уже вольны сообщения для консоли интерпретировать, как вашей душе угодно. Я вот, например, пишу их в специальный журнал. Или в свою "консоль", в качестве которой выступает QTextEdit (опять же, с возможностью сохранения в файле). И никто не мешает в качестве консоли использовать и QListWidget
1
68 / 68 / 17
Регистрация: 20.01.2015
Сообщений: 347
19.03.2016, 21:05
Лучший ответ Сообщение было отмечено b00006 как решение

Решение

b00006,

В testclass.h:
C++ (Qt)
1
2
signals:
void sendSignal(QString);
В run:
C++ (Qt)
1
emit sendSignal("blabla");
В MainWindow.h
C++ (Qt)
1
void recieveSlot(QString str);
В MainWindow:
C++ (Qt)
1
2
3
4
5
void MainWindow::recieveSlot(QString str)
{
//listWidget - наш созданный QListWidget
listWidget.addItem(str);
}
При создании класса
C++ (Qt)
1
connect(&text1,&TestClass::sendSignal,this,&QMainWindow::recieveSlot);
Например так.

Добавлено через 1 минуту
qInstallMsgHandler() - тоже стоит посмотреть. Он перенаправляет вывод туда куда нужно. Им пользоваться весьма удобно, если надо организовать вывод не в одном единичном месте, а по всему приложению.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.03.2016, 21:05
Помогаю со студенческими работами здесь

QListwidget
Создал QListwidget лист из нескольких элементов и создал кнопку pushbutton..Если я выбираю один элемент и нажимаю на кнопку, то открывается...

Работа с QListWidget
Как узнать индекс выделенного элемента? И как удалить элемент по индексу?

QListWidget и русский
В приложении русский настроен. На экране все в порядке отображается но сигнал currentTextChanged(QString) не передает русский (английский в...

Закрасить QListWidget
Нужно закрашивать как отдельные записи QListWidget, так и весь виджет. Есть рабочие функции?

SelectedItems() в QListWidget
Проблемы с выделенными(выбранными) объектами в QListWidget Не могу понять, почему если я ничего не выбираю, он все равно говорит, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru