crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику abc ::: Спасибо сказали: 26 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
13.4.2011, 14:45 Проблема с наследованием QAbstractItemModel
Цитата(fedak_denis @ 13.4.2011, 14:19) *
QuestionsModel questionsModel;

нужно через new, по выходе из области видимости твоя модель удаляется
если хочешь без new, то нужно модель делать членом класса
fedak_denis,
8.4.2011, 12:57 Перемещение QTreeWidgetItem в QTreeWidget
Цитата(dimamix @ 8.4.2011, 13:23) *
void QTreeWidget::removeItemWidget ( QTreeWidgetItem * item, int column )

в QTreeWidgetItem можно установить какой-нибудь виджет, вот его этот метод и удаляет, а не итему
итемы верхнего уровня (именно самого первого уровня) называются TopLevelItem
QTreeWidgetItem * QTreeWidget::takeTopLevelItem ( int index )
void QTreeWidget::addTopLevelItem ( QTreeWidgetItem * item )
dimamix,
7.4.2011, 13:04 Как отличить файл от директории
посмотри класс QFileInfo
Storm,
5.4.2011, 13:04 Как сохранить расположение столбцов в QTableWidget?
соедини сигнал sectionMoved со своим слотом void header::sectionMoved

наследоваться-то было незачем

можно было создать слот в MainWindow и соединить его с сигналом sectionMoved объекта, возвращаемого tableView->horizontalHeader()
RazrFalcon,
3.4.2011, 13:06 QTextEdit, маркер
Цитата(breeve @ 3.4.2011, 2:10) *
В каком пункте могут возникнуть проблемы?

пожалуй, я погорячился)
- поставили курсор. предположим, он стоит где-то в середине подсвеченной фразы
- передвигаем его назад, и с каждым передвижением проверяем, какой под курсором backgroundcolor
- как только backgroundcolor стал белым, выделяем, начиная с этой позиции, известное число символов, и изменяем backgroundcolor
breeve,
3.4.2011, 0:35 QTextEdit, маркер
ui->textEdit_read->moveCursor(QTextCursor::End);
    if(ui->textEdit_read->find("Этот текст будет подсвечен", QTextDocument::FindBackward))
        ui->textEdit_read->setTextBackgroundColor(Qt::yellow);
    ui->textEdit_read->moveCursor(QTextCursor::End);


Цитата(breeve @ 3.4.2011, 0:07) *
чтобы нажав правой только на эти слова в контекстном меню

вряд ли возможно
breeve,
1.4.2011, 20:05 QStandardItemModel сложность со столбцами...
Цитата(bahek3 @ 1.4.2011, 9:28) *
QStandardItem *item = m_pModel->itemFromIndex(index);
QModelIndex idx = m_pModel->index(item->row(),1,item->index());

думаю, нужно убрать item->index()
можно немножко иначе, и мне такой вариант больше нравится:
если ты знаешь index итема:
QModelIndex index1 = index.sibling(0,1)
получили индекс соседа из колонки нумер 1
и дальше, как ты и сделал:
m_pModel->data(index1).toString();
bahek3,
31.3.2011, 11:29 как отловить когда курсор покидает пределы диалога ?
ну, соответственно :)
void QWidget::enterEvent ( QEvent * event )
flankerr,
31.3.2011, 10:00 как отловить когда курсор покидает пределы диалога ?
void QWidget::leaveEvent ( QEvent * event )
мне интересно, зачем это?
flankerr,
24.3.2011, 18:48 Перемещение мыши над QGraphicsView
забудь про else)
Цитата(RazrFalcon @ 24.3.2011, 16:42) *
obj == graphicsView

вот здесь твой obj не graphicsView, а graphicsView->viewport()
а на самом деле, тебе вовсе не нужно проверять что за obj послал событие, если ты установил фильтр только на один виджет, obj по-любому будет он
RazrFalcon,
24.3.2011, 15:00 Перемещение мыши над QGraphicsView
где ты нашёл этот метод?
void mouseMoveEvent(QGraphicsSceneMouseEvent *event);

я у QGraphicsView вижу только такой
void mouseMoveEvent ( QMouseEvent * event )

поменяй, заработает

Если виджеты на сцену, то QGraphicsScene::addWidget
RazrFalcon,
22.3.2011, 21:54 QMdiArea и закрытие по close
удаляя виджет, не удаляешь сабвиндоу, которое является его родителем
вместо close():
this->parent()->deleteLater();
maint,
22.3.2011, 21:27 Выбор цвета
ещё можно делать извращения со StyleSheet. Так я, например, установил цвет текста на кнопке:
QColor color= QColorDialog::getColor(
                                    Qt::black,
                                    this,
                                    tr("Выберите цвет")
                                    );
ui->pushButton->setStyleSheet("color: rgb("
                                +QString::number(color.red())+ ", "
                                +QString::number(color.green())+ ", "
                                +QString::number(color.blue())+ ");"
                                );

запись гнобящая, но ведь можно)
можно ещё palette посмотреть
breeve,
22.3.2011, 21:03 Не срабатывает QEvent::MouseButtonRelease
устанавливать фильтр нужно не на сам текстэдит, а на:
ui->textEdit->viewport()->installEventFilter(this);

если просто на текстэдит, релизэвент будет ловиться, но на кромке текстэдита, потыкай)
legat,
17.3.2011, 23:49 Пропадают иконки в таблице.
"не ровно половина, но где то посредине, обычно. Я бы сказал что один раз пропадает, к примеру, верхняя, то во второй пропадет нижняя, вот так по переменно. Если долго клацать - пропадают все."

я как на фильм проклятье пришёл в кино)


кстати, QTableWidgetItem можно назначить иконку... зачем там вообще кнопку лепить? кроме как затем чтоб её слот clicked() использовать

кстати, кстати, тебе не нужен QList кнопок, достаточно же просто поместить их в таблицу
RazrFalcon,
15.3.2011, 13:31 QGraphicsRectItem и setPos()
Вот код, двигающий левую и верхнюю грани... Надеюсь, он наставит тебя на путь...
Тебе не нужны ректитемы, достаточно в твоём классе нарисовать в paint() четыре линии. В маусэвенте изменять координаты вершин образовавшегося четырёхугольника

item.h
Раскрывающийся текст

class Item : public QGraphicsItem
{
public:
    Item();

    void paint ( QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0 );
    QRectF boundingRect () const;

    void mousePressEvent(QGraphicsSceneMouseEvent *event);
    QPointF point;
    void mouseMoveEvent(QGraphicsSceneMouseEvent *event);

//вершины
    QPointF left_top;
    QPointF left_bottom;
    QPointF right_bottom;
    QPointF right_top;

};



item.cpp
Раскрывающийся текст

Item::Item()
{
    left_top=QPointF(0,0);
    left_bottom=QPointF(0,100);
    right_bottom=QPointF(100,100);
    right_top=QPointF(100,0);
}


void Item::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
    QLineF left_line(left_top,
                     left_bottom);
    painter->drawLine(left_line);

    QLineF bottom_line(left_bottom,
                       right_bottom);
    painter->drawLine(bottom_line);

    QLineF right_line(right_bottom,
                      right_top);
    painter->drawLine(right_line);

    QLineF top_line(right_top,
                     left_top);
    painter->drawLine(top_line);
}


QRectF Item::boundingRect() const        //область, ассоциируемая с итемом - в ней ловится мышь и рисует paint()
{
    return QRectF(-100,-100,200,200);
}


void Item::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
    point=event->pos()-left_top;
//если уберёшь -left_top, будет прыгать в начальное значение на старте нового перетаскивания, как, кажется, было у тебя
}


void Item::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
    left_top=event->pos()-point;
    update();
}



P.S. Когда хочешь показать большой код, оборачивай тег "код" в тег "раскрывающийся текст"
lifrost,
12.3.2011, 21:34 QGraphicsRectItem и setPos()
держи код, который работает, но это в классе итема, а не сцены:
void TextItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
point=event->pos();
}
void TextItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
setPos(event->scenePos()-point);
}


сложный код ты наворотил
mouseReleaseEvent тебе не нужен, т.к. if(leftButton) тебе не нужно

подумай, стоит ли делать свой класс сцены, чтобы забубенить движение итема? если ты, конечно, только для этого влез в класс сцены... К тому же, куда не ткнёшь на сцене, твой итем будет двигаться... а ты ведь хочешь, чтобы он двигался только, когда на него тыкаешь... тут тебе понадобится проверка "а под мышью ли итем"... а если будешь реализовывать поведение итема в классе итема, таких проблем не будет... всякому коду своё место)
lifrost,
12.3.2011, 0:20 Не могу получить текущую выделенную строку
Это я ничего не понял) Только что создал окошко, посадил туда таблицу. При нажатиях клавиш, выделение двигается - остаётся только соединить сигнал
void currentCellChanged ( int currentRow, int currentColumn, int previousRow, int previousColumn )
со своим слотом,
и ты в этом слоте получишь все эти значения:
int currentRow, int currentColumn, int previousRow, int previousColumn

не нужно тебе наследование от QTableWidget и KeyPressEvent


Ну, и поясню, что я до этого городил.
Если у тебя есть класс А, член класса Б, то ты не можешь нуждаться в методах класса Б в классе А. Б использует А, а не наоборот. Жутко формулирую?( Тем более ты не можешь создавать в А объект Б! У тебя это чудом вышло - потому что оба класса разрабатываются в одном файле. А если бы было два заголовочника, и ты бы их друг в друге заинклудил, то компилятор бы с тобой поговорил) Ты дошёл до жизни такой, видимо, потому, что нуждался в слоте on_currentRowIndexChanged() из класса MainWindow, но на самом деле это не так.

И в любом случае ты неверно работал в keyPressEvent(QKeyEvent *event).
Ты не использовал переменную event, а значит обрабатывал нажатия на любые клавиши. А суть этого метода в том, чтобы получить нажатие конкретной клавиши, и это нажатие оригинально обработать.
RazrFalcon,
9.3.2011, 12:34 QTreeView или QTreeWidget
да, придётся писать свою модель
qt\examples\itemviews\simpletreemodel
в бой! m_shok

тут с sql выложен пример:
http://www.sql.ru/forum/actualthread.aspx?tid=611751
ну, кто его знает, может рабочий)
silver47,
23.2.2011, 20:49 Receiver connect() функции в слоте.
QObject::sender()
sidsukana,
18.2.2011, 22:00 QTableWidget - мышиные события
установи фильтр не на tablewidget, а на tablewidget->viewport
это у меня работало на tableview, разницы, наверное, нет
flankerr,
1.2.2011, 22:26 2 таблицы, реляционная модель и QComboBox
узнать id можно так:

QModelIndex index=comboBox->model()->index(comboBox->currentIndex(),0);
QString id=comboBox->model()->data(index).toString();
Rocky,
1.2.2011, 15:04 [Не решено]QTextEdit + AutoScroll
убрать скрол вообще? заставить скрол принимать какое-то нужное положение? убрать можно прям в дизайнере на вкладке текстэдита "qabstractscrollarea". Но скорее нужно управлять его положением, иначе зачем вообще текстэдит, в общем, объясни)

курсор в конец:
ui->textEdit->moveCursor(QTextCursor::End);
breeve,
25.1.2011, 21:47 усовершенствовать QSqlRelationalTableModel
Возможное решение. Для PostgreSQL

QSqlRelationalTableModel результирующий запрос делает такого вида:
select таблица1.поле1, таблица2.поле2 from таблица1, таблица2 where условие подмены

Такой запрос скрывает строки с null, а вот такой не скрывает:
select таблица2.поле from таблица1 left outer join таблица2 on условие подмены
Этот запрос нужно родить и вернуть в методе selectStatement()

Нюансы. Запрос на замену нескольких колонок:
select таблица2.поле, таблица3.поле from таблица1
left outer join таблица2 on условие подмены
left outer join таблица3 on условие подмены
и т.д.

Если две колонки подменяете данными из одной таблицы, то в запросе нужно использовать различные псевдонимы для этой таблицы:
select псевдоним1.поле, псевдоним2.поле from таблица1
left outer join таблица2 псевдоним1 on условие подмены
left outer join таблица2 псевдоним2 on условие подмены
и т.д.


Можно наследоваться от QSqlTableModel, можно от QSqlRelationalTableModel. Во втором случае останется возможность редактировать модель с помощью стандартного делегата QSqlRelationalDelegate, но нужно будет проделать по-старинке setRelation. И это замедлит загрузку модели. Без этого показывается мгновенно.

По редактированию такая проблема, что если вы берёте подменяющие значения из таблицы с множеством записей, из которых вам нужны не все, то напрашивается желание получить фильтр в setRelation. Как это сделать не знаю, но можно воспользоваться возможностью sql-представлений:
create view представление as select колонка1, колонка2 from таблица where фильтр
Дальше вместо setRelation("таблица", ...) делаем setRelation("представление", ...).
В делегате лишних значений не будет, но представления нужно удалять по завершении работы приложения.
igor_bogomolov, tp4,
19.12.2010, 20:04 задача
Блеск! Очень благодарен за подробное объяснение
xzz,

RSS Текстовая версия Сейчас: 12.11.2019, 18:45